资源描述:
《verilog教程范例(北京至芯科技FPGA培训)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Verilog设计举例结构模块的层次化组成各种类型模块之间的关系测试和验证北京至芯FPGA培训设计示例一用门级结构描述D触发器设计示例一moduleflop(data,clock,clear,q,qb);inputdata,clock,clear;outputq,qb;nand#10nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand#
2、9nd3(c,a,d),nd7(q,e,qb);not#10iv1(ndata,data),iv2(nclock,clock);endmodule用户定义的原始元件primitiveudp_and(out,a,b);outputout;inputa,b;table//ab:out;00:0;01:0;10:0;11:1;endtableendprimitive用户定义的原始元件前面模块中的nand和not原语元件(primitive)在Verilog语言中是保留词,它们分别表示:与非门和非门的逻辑关系。在Ve
3、rilog语法中通过用户定义的原始元件语句(即UDP)的真值表和带参数的延迟线模型来表示。在与具体工艺库的逻辑对应时把具体延迟参数传入延迟线模型,再加上描述逻辑关系的UDP。就有了一个与真实情况很接近逻辑模型,仿真器就可以依据它进行计算,来确定相互连接元件的逻辑值。设计示例二由已设计的模块来构成高一级的模块clrdqclkclrdqclkclrdqclkq0d0clrdqclkd3d2q2q3q1d1clrbclkf4f3f2f1四位寄存器电路结构图设计示例二`include“flop.v”modulehar
4、dreg(d,clk,clrb,q);inputclk,clrb;input[3:0]d;output[3:0]q;flopf1(d[0],clk,clrb,q[0],),f2(d[1],clk,clrb,q[1],),f3(d[2],clk,clrb,q[2],),f4(d[3],clk,clrb,q[3],);endmodule设计示例三编写测试模块通过仿真检查设计正确与否`include“hardreg.v”modulehardreg_top;regclock,clearb;reg[3:0]data;w
5、ire[3:0]qout;`definestim#100data=4'b//宏定义stim,可使源程序简洁eventend_first_pass;//定义事件end_first_pass设计示例三(续)hardregreg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout));/*---------------------------------------------------把本模块中产生的测试信号data、clock、clearb输入实例reg_4bit以
6、观察输出信号qout.实例reg_4bit引用了hardreg---------------------------------------------------*/initialbeginclock=0;clearb=1;endalways#50clock=~clock;设计示例三(续)initialbeginrepeat(4)begin/*-------------------------------------------------宏定义stim引用,等同于#100data=4'b注意引用时要用`符
7、号。-------------------------------------------------*/`stim0000;`stim0001;......`stim1111;#200->end_first_pass;//延迟200个单位时间,触发事件end_first_passend$finish;//结束仿真end设计示例三(续)always@(end_first_pass)clearb=~clearb;//清零信号电平翻转always@(posedgeclock)$display(“attime%0d
8、clearb=%bdata=%bqout=%b”,$time,clearb,data,qout);endmodule设计示例四带异步复位端的D触发器moduleDFF(q,d,clk,reset);outputq;inputd,clk,reset;regq;always@(posedgeresetornegedgeclk)if(reset)q<=1'b0;elseq<=d;endmodule设计示