- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ModelSim环境基于VHDL语言的testbench书写
testbench顾名思义就是一个测试台,它对外没有接口,所以实体部分为空,但它要对要测试的器件提供激励信号,这其实就是最简单的testbench,以下是具体的操作步骤:
1.首先基于QuartusII建立的一个新的工程,编译通过,这其实就是我们要测试的源文件DUT(design under test)counter.vhd.
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport(clk: in std_logic;????? reset: in std_logic;????? en: in std_logic;????? q: out std_logic_vector(3 downto 0));end counter;architecture behave of counter is??? signal q_n: std_logic_vector(3 downto 0);begin??? process(clk, reset, en, q_n)??? begin??????? if (reset = 1) then??????????? q_n = (others = 0);--òì2???á???????? elsif rising_edge(clk) then??????????? if en = 1 then??????????????? q_n = q_n + 1;??????????? end if;??????? end if;??? end process;??? q = q_n;end behave;
2.打开ModelSim,指定路径为Quartus工程所在目录;建立新的仿真工程,添加文件(DUT)。
3.编译DUT文件到仿真库中(右键DUT,选择compile).
4.写testbench文件(counter_tb.vhd)。首先选择view-source-show language templates,然后选择file-new-source-vhdl,双击creat testbench,选择Design Unit Name为DUT文件,点击finish,模板创建完成,然后右键取消read only ,自己添加测试信号。
LIBRARY ieee? ;USE ieee.std_logic_unsigned.all? ;USE ieee.std_logic_1164.all? ;ENTITY counter_tb? IS???? constant ClockPeriod: time := 40 ns;END ;?ARCHITECTURE counter_tb_arch OF counter_tb IS? component counter is??????? port(clk: in std_logic;??????????? reset: in std_logic;??????????? en: in std_logic;??????????? q: out std_logic_vector(3 downto 0));??? end component counter;??????????????? signal clock, rst, en: std_logic;??? signal q: std_logic_vector(3 downto 0);begin??? CounterInstance: counter port map(clock, rst, en, q);?????? simProcess: process??? begin??????? rst = 1;??????? wait for 50 ns;??????? rst = 0 ;??????? wait for 1000 ns;??????? rst = 0 ;??? end process simprocess;?????? en = 0 after 0 ns,??????? 1 after 50 ns,??????? 0 after 850 ns,??????? 1 after 900 ns;???????? ClockProcess: process(clock, rst)??? begin??????? if (rst = 1) then??????????? clock = 0;??????? else??????????? clock = not clock afte
文档评论(0)