您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Verilog HDL的故事 之 刺激和激励过程
他和它的故事VerilogHDL之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:实验二十一:仿真定时器............................................................................036.02刺激的各种输入............................................................................................11实验二十二之一:虚拟按键........................................................................11实验二十二之二:仿真按键消抖模块..........................................................20实验二十三:PS2模块仿真..........................................................................276.03模块相互刺激................................................................................................32实验二十四之一:仿真串口发送模块........................................................32实验二十四之二:仿真串口接收模块........................................................366.04麻烦的IO口仿真..........................................................................................42实验二十五:仿真带有IO的模块..............................................................43总结....................................................................................................................................56他和它的故事VerilogHDL之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:第六章:刺激和激励过程6.1精密计数当笔者看到精密计数笔者就觉得很好笑,精密计数确实是仿真中最重要的入门课,它和流水灯实验一样那么经典,为什么要这样说呢?从实验一到实验二十我们几乎都是在计数“几个时钟”,“在第几个时钟,发生什么事...”。当我们开始仿真稍微复杂的模块,常常要明白,模块之间的沟通,上一层模块在什么步骤(时钟)和下一层模块在什么步骤(时钟)有什么交互作用等。我们以一个简单的实验来解释这一切:实验二十一:仿真定时器这个实验很简单,我们只要建立两个定时器,一个在1us产生定时,则另一个在3us产生定时,然后观察这两个定时器在不同状态的输出。counter_module.v1.modulecounter_module2.(3.inputCLK,4.inputRSTn,5.6.output_1US,7.output_3US,8.output_is1US,9.output_is3US,10.output[4:0]C1,11.output[5:0]C212.);13.14./*******************************/15.16.parameterT1US=5'd20;17.18./*******************************/19.20.reg[4:0]Count_1US;21.regis1US;22.他和它的故事VerilogHDL之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:@(posedgeCLKornegedgeRSTn)24.if(!RSTn)25.beginCount_1US=5'd0;is1US=1'b0;end26.elseif(Count_1US==T1US)27.beginCount_1US=5'd0;is1US=1'b1;end28.else29.beginCount_1US=Count_1US+1'b1;is1US=1'b0;end30.31./*******************************/32.33.parameterT3US=6'd60;34.35./*******************************/36.37.reg[5:0]Count_3US;38.regis3US;39.40.always@(posedgeCLKornegedgeRSTn)41.if(!RSTn)42.beginCount_3US=6'd0;is3US=1'b0;end43.elseif(Count_3US==T3US)44.beginCount_3US=6'd0;is3US=1'b1;end45.else46.beginCount_3US=Count_3US+1'b1;is3US=1'b0;end47.48./*******************************/49.50.assign_1US=(Count_1US==T1US)?1'b1:1'b0;51.assign_3US=(Count_3US==T3US)?1'b1:1'b0;52.assign_is1US=is1US;53.assign_is3US=is3US;54.assignC1=Count_1US;55.assignC2=Count_3US;56.57./*******************************/58.59.endmodule第16行是1us的常量声明,第17行是1us的标志寄存器is1US。第23~29是1us的定时器。第33行是3us的常量声明,第37行是3us的标志寄存器is3US。第40~46是3us的定时器。第50行是有组合逻辑驱动1us定时标志,第51行是由组合逻辑驱动的3us定时标志,第52行是由is1US标志寄存器驱动的1us定时标志,第53行是由is3US标志寄存器驱动的3us定时标志。第54~55行则是,计数寄存器Count_1US和Count_3US的相关输出。他和它的故事VerilogHDL之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:`timescale1ns/1ps2.modulecounter_module_simulation();3.4.regCLK;5.regRSTn;6.7.wire_1US;8.wire_3US;9.10.wire_is1US;11.wire_is3US;12.13.wire[4:0]C1;14.wire[5:0]C2;15.16./************************/17.18.counter_modulei119.(20..CLK(CLK),21..RSTn(RSTn),22.._1US(_1US),23.._3US(_3US),24.._is1US(_is1US),25.._is3US(_is3US),26..C1(C1),27..C2(C2)28.);29.30./************************/31.32.initial33.begin34.RSTn=0;#1000;RSTn=1;35.CLK=0;forever#25CLK=~CLK;36.end37.38./************************/39.40.41.endmodule他和它的故事VerilogHDL之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:在编辑激励文件的时候,有几个地方笔者非常讲究在第4~8行,笔者尽量会编辑和.v的输入输出一致。此外(在10~20行)都是先实例化要仿真的模块,然后(在22~26行——)再建立时钟信号和复位信号。在第1行是时间刻度(时间单位)在这里1ns位单位,1ps为小数(可以无视)。第4~8行,在建立虚拟环境的规则中,第4~5行表示了输入,然而7~8行表示了输出。第10~20行是测试模块的实例化。第22~26行是时钟信号和复位信号,复位信号拉低1us的时间(实际情况是1us~6us),时钟信号近似了黑金开发板上的时钟频率,亦即20Mhz。一个时间周期为50ns,所以半个时钟周期为25ns。仿真结果:在上图仿真的仿真结果是从复位信号拉低开始到3us定时信号产生。在这里笔者建立的近似黑金开发板的虚拟环境,其中时间周期为50ns,复位时间为1us。在复位信号RSTn拉高以后,.v开始工作。上图是1us不同方式的定时结果。(Cursor省略为C)C1~C2之间表示了由组合逻辑驱动的定时标志,在还未满1us,亦即在0.95us的时候它产生了定时信号。0.95us/50ns=19。如果从T0开始算起,亦即在T18的时候.v它“决定”拉高_1US一个时钟(注意:这时候的计数器C1,计数到他和它的故事VerilogHDL之刺激和激励过程博客:http//blog.ednchina.com/akuei2社区:)。所以在T18的未来_1US被拉高一个时钟。反之C1~C3之间表示了由寄存器驱动的1us定时,在满1us产生的时候,它产生定时信号。1us/50ns=20。如果从T0开始算起,亦即在T19的时候.v它“决定”拉高_is1US一个时钟(注意:这时候的计数器C1,计数到20)。所以在T19的未来_is1US被拉高一个时钟。上图是3us不同方式的定时结果。(Cursor省略为C)C1~C4之间表示了由组合逻辑驱动的定时标志,在还未满3us,亦即在3.975ns-1.025ns=2.95ns的时候它产生了定时信号。2.95us/50ns=59。如果从T0开始算起,亦即在T58的时候.v它“决定”拉高_3US一个时钟(注意:这时候的计数器C2,计数到59)。所以在T58的未来_3US被拉高一个时钟。反之C1~
本文标题:Verilog HDL的故事 之 刺激和激励过程
链接地址:https://www.777doc.com/doc-5471766 .html