资源描述:
《组合-时序逻辑电路verilog-testbench代码_带仿真代码和波形_》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1组合逻辑电路--基本门电路1.1基本门电路1.1.1结构化描述方式代码如下ViewCode1modulelogics2(3inputiA,4inputiB,5outputoAnd,6outputoOr,7outputoNot8);910andand_inst(oAnd,iA,iB);11oror_inst(oOr,iA,iB);12notnot_inst(oNot,iA);1314endmodule最底层的是门级原语andornotRTL级视图testbench如下ViewCode1`timescale1ns/1ns2modulelogics_
2、tb();34regia;5regib;67wireoAnd;8wireoOr;9wireoNot;1011initial12begin13ia=0;14#40ia=1;15#40ia=0;16#40ia=1;17#40ia=0;18end1920initial21begin22ib=0;23#40ib=0;24#40ib=1;25#40ib=1;26#40ib=0;27end2829logicslogics_inst30(31.iA(ia),32.iB(ib),33.oAnd(oAnd),34.oOr(oOr),35.oNot(oNot)36)
3、;3738endmoduleRTL级仿真图形如下GATE级仿真图如下可见RTL级仿真是理想的,GATE级仿真考虑了延迟和信号开始的不确定。1.1.2采用流描述方法代码如下ViewCode1modulelogics2(3inputiA,4inputiB,5outputoAnd,6outputoOr,7outputoNot8);910assignoAnd=iA&iB;11assignoOr=iA
4、iB;12assignoNot=~iA;1314endmoduleRTL级视图,仿真图形同上。1.1.3采用行为描述方式代码如下ViewCode1modul
5、elogics2(3inputiA,4inputiB,5outputregoAnd,6outputregoOr,7outputregoNot8);910always@(*)11begin12oAnd=iA&iB;13oOr=iA
6、iB;14oNot=~iA;15end1617endmodulealways@()括号内的敏感信号填*,则综合器自动加上敏感信号。由于always语句中左边信号都要是寄存器型,故输出信号定义为寄存器型。描述组合逻辑时,always中使用阻塞赋值方式。RTL级视图及仿真图形同上。2组合逻辑电路--多路选择器与多路分解器1.
7、2多路选择器1.2.1不带优先级的多路选择器四路选择器如下代码如下ViewCode1modulemultiplexer2(3inputiA,4inputiB,5inputiC,6inputiD,7input[1:0]iSel,8outputregoQ9);1011always@(*)12begin13case(iSel)142'b00:oQ=iA;152'b01:oQ=iB;162'b10:oQ=iC;172'b11:oQ=iD;18endcase19end2021endmodulecase语句如果没有全部包含所有的情况,则一般要用default
8、语句将信号默认赋值为0,否则会出现锁存器,使得仿真结果不一致。RTL级视图如下:testbench如下ViewCode1`timescale1ns/1ns2modulelogics_tb();34regia;5regib;67wireoAnd;8wireoOr;9wireoNot;1011initial12begin13ia=0;14#40ia=1;15#40ia=0;16#40ia=1;17#40ia=0;18end1920initial21begin22ib=0;23#40ib=0;24#40ib=1;25#40ib=1;26#40ib=0;
9、27end2829logicslogics_inst30(31.iA(ia),32.iB(ib),33.oAnd(oAnd),34.oOr(oOr),35.oNot(oNot)36);3738endmoduleinitial语句和always语句左边的信号类型都要为reg。RTL级仿真图形如下1.2.2带优先级的多路选择器代码如下ViewCode1modulemultiplexer2(3inputiA,4inputiB,5inputiC,6inputiD,7input[1:0]iSel,8outputregoQ9);1011always@(*)1
10、2if(iSel==2'b00)13oQ=iA;14elseif(iSel==2'b01)15oQ=iB;16elseif(iSel==