资源描述:
《Verilog-HDL数字设计教程(贺敬凯)第4章课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、4.1常用组合逻辑电路设计4.2常用时序逻辑电路设计4.3小结习题44.1常用组合逻辑电路设计理论上,可利用化简真值表并采用逻辑门来实现电路的方法,对所有组合电路进行设计,但使用该方法设计大型组合电路则不太现实。例如,一个有12个输入的电路,在真值表中会有212 = 4 K行。降低复杂度的一种方法就是采用比逻辑门功能更强大的组合元件,图4-1列出了常用的几种组合元件。图4-1组合元件下面使用VerilogHDL分别对上述组合元件及常用的组合逻辑电路进行建模。1.数据选择器例4-1实现了一个n位,m × 1的数据选择器。【例4-1】参数型n位,m × 1数据选
2、择器。modulemultiplexer_N(X1,X2,X3,X4,sel,Y);parameterN=8;//该参数定义了一个8位的4选1多路选择器input[N-1:0]X1,X2,X3,X4;input[1:0]sel;outputreg[N-1:0]Y;always@(sel,X1,X2,X3,X4)case(sel)2'b00:Y=X1;2'b01:Y=X2;2'b10:Y=X3;2'b11:Y=X4;endcaseendmodule程序说明:(1)程序中定义了4个输入X1、X2、X3、X4,一个输出Y,使用控制信号sel选择4个输入中的1个赋给
3、Y。(2)程序中使用parameter定义了一个参数常量N,通过修改参数可以很容易地改变输入、输出的位数。2.译码器例4-2实现了一个log2n × n的译码器。【例4-2】参数型log2n × n译码器。moduledecode_N(sel,Y);parameterN=4;//该参数定义了一个4输出(4位)译码器input[1:0]sel;//此参数为2位,通过计算log24=2可得到4输出译码器outputreg[N-1:0]Y;always@(sel)case(sel)2'b00:Y=4'b0001;2'b01:Y=4'b0010;2'b10:Y=4'
4、b0100;2'b11:Y=4'b1000;endcaseendmodule程序说明:(1)程序中定义了一个输入sel,一个输出Y,使用控制信号sel来确定Y的输出。(2)由于本程序涉及求以2为底的对数计算,因此若修改参数N,sel的位数就要手工做相应调整,这样才可实现任意位数的译码器。3.加法器例4-3实现了N位加法器。【例4-3】参数型N位加法器。moduleadd_N(X,Y,sum,co);parameterN=8;input[N-1:0]X,Y;output[N-1:0]sum;outputco;assign{co,sum}=X+Y;endmodu
5、le程序说明:(1)程序中,X和Y分别为加数和被加数,sum和co分别为本位和及进位。(2)本例使用数据流建模实现,在综合时会自动映射为QuartusⅡ自带的加法器宏功能模块。4.乘法器例4-4实现了N位乘法器。【例4-4】参数型N位乘法器。modulemul_N(X,Y,mul);parameterN=8;input[N-1:0]X,Y;output[2*N-1:0]mul;assignmul=X*Y;endmodule程序说明:(1)程序中,X和Y分别为乘数和被乘数,mul为两者的积。(2)本例使用数据流建模实现,在综合时,会自动映射为QuartusⅡ自
6、带的乘法器宏功能模块。5.比较器例4-5实现了N位比较器。【例4-5】参数型N位比较器。modulecompare_N(X,Y,X_gt_Y,X_eq_Y,X_lt_Y);parameterN=8;//参与比较的数的位数为8nput[N-1:0]X,Y;outputregX_gt_Y,X_eq_Y,X_lt_Y;always@(X,Y)if(X>Y)beginX_gt_Y=1;X_eq_Y=0;X_lt_Y=0;endelseif(X==Y)beginX_gt_Y=0;X_eq_Y=1;X_lt_Y=0;endelsebeginX_gt_Y=0;X_eq_Y
7、=0;X_lt_Y=1;endendmodule程序说明:(1)比较器实现的功能见表4-1。(2)比较器有3个输出,在任一时刻仅有一个输出为1,即仅有一个输出有效。6. ALU例4-6实现了一个n位、m功能的ALU。【例4-6】参数型n位、m功能ALU。modulealu_N(X,Y,sel,result);parameterN=8;input[2:0]sel;//3位可定义m=8功能input[N-1:0]X,Y;outputreg[N-1:0]result;always@(X,Y,sel)begincase(sel)3'b000:result=X+Y;/
8、/加法3'b001:result=X-Y;//减法3