资源描述:
《verilog_hdl实例(一)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、//与门modulezxhand2(c,a,b);inputa,b;outputc;assignc=a&b;endmodule//或门modulezxhor2(c,a,b);inputa,b;outputc;assignc=a
2、b;endmodule//非门modulezxhnot2(c,b);inputb;outputc;assignc=~b;endmodule////异或门modulezxhxro2(c,a,b);inputb;outputc;assignc=a^b;endmodule两选一电路moduleda
3、ta_scan(d0,d1,sel,q);outputq;inputd0,d1,sel;wiret1,t2,t3;n1zxhand2(t1,d0,sel);n2zxhnot2(t4,sel);n3zxhand2(t2,d1,t4);n4zxhor2(t3,t1,t2);assignq=t1;endmoduleverilogHDL实例(一)练习一.简单的组合逻辑设计目的:掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结
4、果0。在VerilogHDL中,描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: //---------------compare.v----------------- modulecompare(equal,a,b); inputa,b; outputequal; assignequal=(a==b)?1:0;//a等于b时,equal输出为1;a不等于b时,
5、 //equal输出为0。 endmodule 测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。 测试模块源代码: `timescale1ns/1ns//定义时间单位。 modulecomparetest; rega,b; wireequal; initial//initial常用于仿真时信号的给出。 begina=0; b=0;
6、#100a=0; b=1; #100a=1; b=1; #100a=1; b=0; #100$stop;//系统任务,暂停仿真以便观察仿真波形。 end comparecompare1(.equal(equal),.a(a),.b(b));//调用模块。Endmodule【例3.1】4位全加器moduleadder4(cout,sum,ina,inb,cin);output[3:0]sum;outputcout;input[3:0]in
7、a,inb;inputcin;assign{cout,sum}=ina+inb+cin;endmodule【例3.2】4位计数器modulecount4(out,reset,clk);output[3:0]out;inputreset,clk;reg[3:0]out;always@(posedgeclk)beginif(reset)out<=0;//同步复位elseout<=out+1;//计数endendmodule09.04.07【例5.11】模为60的BCD码加法计数器modulecount60(qout,c
8、out,data,load,cin,reset,clk);output[7:0]qout;outputcout;input[7:0]data;inputload,cin,clk,reset;reg[7:0]qout;always@(posedgeclk)//clk上升沿时刻计数beginif(reset)qout<=0;//同步复位elseif(load)qout<=data;//同步置数elseif(cin)beginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]<=0;//回
9、0,并判断高位是否为5if(qout[7:4]==5)qout[7:4]<=0;elseqout[7:4]<=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]<=qout[3:0]+1;endendassigncout=((qout==8'h59)&cin)?1:0;//产生进位输出信号endmodule【