- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从算法设计到硬线逻辑的实现教程范例培训教案
Verilog 设计举例 结构模块的层次化组成 各种类型模块之间的关系 测试和验证 设计示例一用门级结构描述D触发器 设计示例一 用户定义的原始元件 primitive udp_and (out,a,b); output out; input a,b; table //a b : out; 0 0 : 0; 0 1 : 0; 1 0 : 0; 1 1 : 1; endtable endprimitive 用户定义的原始元件 前面模块中的nand和not原语元件(primitive)在Verilog 语言中是保留词,它们分别表示: 与非门和非门的逻辑关系。 在Verilog 语法中通过用户定义的原始元件语句(即UDP)的真值表和带参数的延迟线模型来表示。在与具体工艺库的逻辑对应时把具体延迟参数传入延迟线模型,再加上描述逻辑关系的UDP 。就有了一个与真实情况很接近逻辑模型,仿真器就可以依据它进行计算,来确定相互连接元件的逻辑值。 设计示例二由已设计的模块来构成高一级的模块 设计示例二 `include “ flop.v ” module hardreg(d,clk,clrb,q); input clk,clrb; input[3:0] d; output[3:0] q; flop f1(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 设计示例三编写测试模块通过仿真检查设计正确与否 设计示例三 (续) 设计示例三 (续) 设计示例三 (续) 设计示例四 带异步复位端的 D 触发器 module DFF(q, d, clk, reset); output q; input d, clk, reset; reg q; always @(posedge reset or negedge clk) if (reset) q = 1b0; else q = d; endmodule 设计示例四(续)用D触发器构成T触发器 module TFF(q, clk, reset); output q; input clk, reset; wire d; DFF dff0(q, d, clk, reset); // DFF已在上面的模块定义 not n1(d, q); // not 表示非门是一个Verilog 原语. endmodule 设计示例四(续)用四个T触发器组成一个进位计数器 module ripple_carry_counter(q, clk, reset); output [3:0] q; input clk, reset; //4 instances of the module TFF are created. TFF tff0(q[0],clk, reset); TFF tff1(q[1],q[0], reset); TFF tff2(q[2],q[1], reset); TFF tff3(q[3],q[2], reset); endmodule 设计示例四(续)用激励信号对进位计数器进行测试 module stimulus; reg clk; reg reset; wire[3:0] q; // instantiate the design block ripple_carry_counter r1(q, clk, reset); // Control the clk signal that drives the design block. initial clk = 1b0; always #5 clk = ~clk; 设计示例四(续)用激励信号对进位计数器进行测试 // Control the reset signal that drives the design block initial begin reset = 1b1; #15 reset = 1b0; #180 reset = 1b1; #10 reset = 1b0; #20 $stop; end 设计示例四(续)用激励信号对进位计数器进行测试 // Monitor the outputs initial $monitor($time, Output q = %d, q); endm
文档评论(0)