veriloghdl那些事儿命令式的仿顺序操作

veriloghdl那些事儿命令式的仿顺序操作

ID:30363389

大小:91.44 KB

页数:21页

时间:2018-12-29

veriloghdl那些事儿命令式的仿顺序操作_第1页
veriloghdl那些事儿命令式的仿顺序操作_第2页
veriloghdl那些事儿命令式的仿顺序操作_第3页
veriloghdl那些事儿命令式的仿顺序操作_第4页
veriloghdl那些事儿命令式的仿顺序操作_第5页
资源描述:

《veriloghdl那些事儿命令式的仿顺序操作》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、VerilogHDL那些事儿命令式的仿顺序操作标签:无标签声明:本文为原创作品,版权归akuei2及黑金动力社区()共同所有,如需转载,请注明出处命令式的仿顺序操作什么是VerilogHDL式的仿顺序操作!?在明白这东西之前,我们先看几个例子:假设我要建立可以产生SSS,S0S,0S0,000这四种模块。如果模仿C语言函数会是如下://基础函数S_Function(){.}O_Function(){.}//基于基础函数创建的函数SSS_Function()S_Function();S_Function();S_

2、Function();SOS_Fucntion()S_Function();O_Function();S_Function();OSO_Fucntion()O_Function();S_Function();O_Function();OOO_Fucntion()O_Function();O_Function();O_Function();我们会很自然的,以S_Function()和O_Fucntion()为基础,再建立出四个新的SOS_Function(),SSS_Function(),OSO_Function

3、(),和OOO_Fucntion()。在仿顺序语言上(如C语言),这样的方法当然,没有问题,但是在VerilogHDL上呢?笔者说过"仿顺序操作"归根究底不是单纯模仿顺序操作而已,而是利用VerilogHDL语言本身的特质,去模仿顺序操作。4.1章~4.2章的实验,虽然达到以上这一点,但这只是仅限于"少个函数"而已。我们来看看,如果以4.1章~4.2章为基础,来模仿以上的顺序操作的话,会是什么样一个结果。如图上!可怕吧!逐渐建立SSS组合模块,SOS组合模块,OSO组合模块和OOO模块。然而每一个组合模块都包含

4、各自的"控制模块","S摩斯码模块","O模式码模块"和"选择器"。最后,每一个组合模块的输出,还需要一个输出选择器来协调操作。我们从另一个方面来分析它的缺点:(一)模块的重复,资源的消耗。(二)建模量多,连线设计繁多。(三)模块调用的难度。诸如以上等。如果你有笔者这样的耐性,当然没有问题,但是实际上笔者也觉得非常"猥琐",而且建模的设计也很苦难。所以我们需要另一种"仿顺序操作"的方法,毕竟4-1章和4-2章的方法,只适合小规模的"仿顺序操作"。那个方法即是"命令式的仿顺序操作"。何谓"命令式的仿顺序操作?"我

5、们来看看下面的一张图,就可以知道个大概:如上图!结果我们可以把如上的建模精简到这样的程度,当然在各个所包含的内容中,代码的结构也是有保障的。如果继续引入以上的例子,那么:function_module.vmodulefunction_moduleFunction_Start_Sig,Function_Done_Sig,Pin_Out);input[1:0]Function_Start_Sig;inputFunction_Done_Sig;outputPin_Out;/*///定时器和延时器/*/reg[3:0]

6、i;regrPin_Out;regisDone;always@(posedgeorCLKornegedgeRSTn)if(!RSTn)begini=4'd0;rPin_Out=1'b0;isDone=1'b0;end===elseif(Function_Start_Sig[1])case(i)//S摩斯码产生4'd9:beginisDone=1'b1;i=i+1'b1;end4'd10:beginisDone=1'b0;i=4'd0;endcase===elseif(Function_Start_Sig[0])

7、case(i)//0摩斯码产生4'd9:beginisDone=1'b1;i=i+1'b1;end4'd10:beginisDone=1'b0;i=4'd0;endcase/*/assignFunction_Done_Sig=isDone;assignPin_Out=rPin_Out;/*/endmodule关于function_module.v关键的部分是Function_Start_Sig的位宽和elseif部分。Function_Start_Sig的每一位"位宽"都代表不同的"Start_Sig"。Fun

8、ction_Start_Sig[1.0]位命令功能10S莫斯码产生01O摩斯码产生然而"Done_Sig"和以往一样,没有任何变化。假设我要产生S模式码,那么我只要往Function_Start_Sig输入2'b10即可。cmd_control_module.vmodulecmd_control_moduleCommand_Start_Sig,Commnad_Done_Sig,Func

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。