第3节VERILOG建模与调试的技巧 READ.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3节VERILOG建模与调试的技巧 READ

第3节 Verilog建模与调试技巧 Verilog 建模 调试 3.3.1 双向端口的使用和仿真? 双向端口顾名思义既可以作为输入端口接收数据,也可以作为输出端口发出数据,对数据的操作是双向的。比如某个设计需要一个16位的数据输入口和一个16位的数据输出口,并且数据输入和输出不会同时发生。如果分别设计数据输入口和输出口,就需要32根数据线;而用双向端口来设计,只需要16根数据线,这样就节省了16根数据线引脚。本节给出FPGA中双向端口的设计原理和方法,以及仿真和初始化双向端口的方法。 1. 双向端口的实现原理 双向端口是通过控制三态门来实现的,其典型结构如图3-23所示。当z=0时,上面输出的管子开通,此时数据可以从上面的管子中输出,这时双向端口就作为输出口;当z=1时,上面的管子被置为高阻态,数据不能从上面的管子输出,此时数据只可以从下面的管子由外向内输入,这时的双向端口是输入口。 图3-25 双向端口的硬件结构 2. 双向端口的Verilog实现 根据Verilog HDL语法,I/ O端口可以分成三类:输入端口input;输出端口output以及双向端口inout。output端口信号可定义成寄存器型变量,并在always块内可以被赋值使用,而inout型双向端口信号不能被定义成reg型变量,因此只能采用assign赋值语句,不能在always块内使用,这一点与VHDL中双向端口的使用方法不同。 双向端口的语法为: ??? inout a; wire z, b; ??? //当控制信号z为1时,开通三态门,a为输入端口;当z为0时,三态门为高阻, ??? //a为输出端口 例如,assign a = (z) ? b : 8bz; 例3-16 使用Verilog实现一个位宽为16比特的数据选择器,其结构如图3-24所示,当控制信号 时,将输入数据从双向端口输出;当控制信号 时,将双向端口数据从输出端口输出。 图3-2616比特数据选择器的示意图 module bidirec_data(clk,z,din,dinout,dout); ?????? input clk; //时钟? ???????input z; //控制信号 ?????? input [15:0] din; //输入时钟? ???????inout [15:0] dinout; //双向端口 ?????? output [15:0] dout; //输出时钟 ?????? reg [15:0] dout; ?????? reg [15:0] din_t;? ?????? assign dinout=(!z) ? din_t : 16bz; //完成双向赋值 ??????? always@(posedge clk) begin ??????? if (!z) ??????? din_t = din; ??????? else ???????????? dout = dinout; ??????? end endmodule 3. 双向端口的仿真 当双向端口作为输出口时,我们不需要对它进行初始化,而只需要开通三态门。当双向端口作为输入口时,需要对它进行初始化赋值,并关闭三态门。对双向端口的初始化赋值,需要使用wire型的数据。此外可以通过force命令来对双向端口输入赋值。? 例3-17 用Verilog完成例3-16的测试,并给出相应的测试结果。 module test_bidata; ??????? // The input signals ??????? reg clk; ??????? reg z; ??????? reg [15:0]din; ??????? // The output signals ??????? wire [15:0] dout; ??????? wire [15:0] dinout; ??????? integer i; ??????? bidirec_data uut(? ?????????? .din(din),? ???????? ??.?z z),? ???????????.? clk(clk),? ?????????? .?dout(dout),? ???????????. dinout(dinout)); ??????? always #10 clk= ~clk; ???????? initial begin ??????????????? z=1; ??????????????? clk=0; ??????????????? din = 0;? ????????????????

您可能关注的文档

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档