Verilog没有葵花宝典——day1(进制与编码)

题目

  1. bit, byte, word, dword, qword的区别。
  2. 什么是原码,反码,补码,符号-数值码。以8bit为例,给出各自表示的数值范围。
  3. 十进制转换为二进制编码: 127, (-127),127.375,(-127.375)
  4. 设计BCD译码器,输入0~9。采用verilog描述并画出门级电路图。
  5. 异步FIFO深度为17,如何设计地址格雷码?

第一题

bit:位,二进制中的一位,是计算机存储信息的最小单位;

byte:字节,1byte=8bit;

word:字,1word=2byte=16bit;

dword:双字,double word,1dword=2word=4byte=32bit;

qword:四字,quad-word,1qword=4word=8byte=64bit。

第二题

这个题目以前做过,这里再复习一遍。

原码:带符号数的符号数值码表示,又称作原码,用二进制数位串的最高有效位(MSB)作为符号位,0表示正号(Plus),1表示负号(Minus),其余较低位表示数的绝对值(数值)(Magnitude)。以8bit为例,最大——0111_1111;最小——1111_1111,范围-127~+127。

反码:正数的反码是它本身,负数的反码是保留符号位,其它位按位取反。范围与原码相同,以8bit为例是-127~+127。

补码:正数的补码是它本身,负数的补码是保留符号位,其它位按位取反再加1。以4bit为例,表示范围为-128~+127。

符号-数值码:sign magnitude,有的教材认为与原码一样;有的教材认为符号-数值码相较于原码没有负0。范围-127~+127。

第三题

仍然是复习。

整数部分最基础的就是“除2取余法”,小数部分是"乘2取整法"。

整数部分比较快捷的方法:127=64+32+16+8+4+2+1=26+25+24+23+22+21+202^6+2^5+2^4+2^3+2^2+2^1+2^0=(1111111)b(1111111)_b

小数部分没有什么比较快的,就是基础法:0.375×2=0.750.375\times2=0.75取0;0.75×2=1.50.75\times2=1.5取1;0.5×2=10.5\times2=1取1。

所以可得

127 \to 0111_1111

-127 \to 1111_1111

127.375 \to 0111_1111.011

-127.375 \to 1111_1111.011

第四题

verilog描述

module BCD_Decoder(
	input		[3:0]	A,
	//output	reg	[9:0]	Y_L
	output		[9:0]	Y_L
);

always @ (*)
	case(A)
		4'd0:Y_L=10'b11_1111_1110;
		4'd1:Y_L=10'b11_1111_1101;
		4'd2:Y_L=10'b11_1111_1011;
		4'd3:Y_L=10'b11_1111_0111;
		4'd4:Y_L=10'b11_1110_1111;
		4'd5:Y_L=10'b11_1101_1111;
		4'd6:Y_L=10'b11_1011_1111;
		4'd7:Y_L=10'b11_0111_1111;
		4'd8:Y_L=10'b10_1111_1111;
		4'd9:Y_L=10'b01_1111_1111;
		default:Y_L=10'b11_1111_1111;
	endcase
/*
assign Y_L[0] = ~(~A[3] & ~A[2] & ~A[1] & ~A[0]);
assign Y_L[1] = ~(~A[3] & ~A[2] & ~A[1] & A[0]);
assign Y_L[2] = ~(~A[3] & ~A[2] & A[1]  & ~A[0]);
assign Y_L[3] = ~(~A[3] & ~A[2] & A[1]  & A[0]);
assign Y_L[4] = ~(~A[3] & A[2]  & ~A[1] & ~A[0]);
assign Y_L[5] = ~(~A[3] & A[2]  & ~A[1] & A[0]);
assign Y_L[6] = ~(~A[3] & A[2]  & A[1]  & ~A[0]);
assign Y_L[7] = ~(~A[3] & A[2]  & A[1]  & A[0]);
assign Y_L[8] = ~(A[3]  & ~A[2] & ~A[1] & ~A[0]);
assign Y_L[9] = ~(A[3]  & ~A[2] & ~A[1] & A[0]);
*/
endmodule

思路及电路图

BCD译码器功能表 门级电路图 Vivado综合的门级电路图

第五题(待后续研究)

只能偶数,深度为18(5bit)

00100 \to
01100 \to
01101 \to
01111 \to
01110 \to
01010 \to
01011 \to
01001 \to
01000 \to
11000 \to
11001 \to
11011 \to
11010 \to
11110 \to
11111 \to
11101 \to
11100 \to
10100 \to

也有文档说17+17的(6bit)

001000 \to
011000 \to
011001 \to
011011 \to
011010 \to
011110 \to
011111 \to
011101 \to
011100 \to
010100 \to
010101 \to
010111 \to
010110 \to
010010 \to
010011 \to
010001 \to
010000 \to
110000 \to
110001 \to
110011 \to
110010 \to
110110 \to
110111 \to
110101 \to
110100 \to
111100 \to
111101 \to
111111 \to
111110 \to
111010 \to
111011 \to
111001 \to
111000 \to
101000 \to

即将入行的数字IC设计工程师