原先在学校的学习的EDA设计课程里面使用的是quartusII9.0是自带仿真器的,使用起来十分方便,但是现在自己开发的时候使用了12.1,不含仿真器,需要安装modelsim并和quartusII绑定:
安装quartusII,破解,安装modelsim,破解,注意,不要忘记在Win32文件夹下运行EXE破解破解软件的时候,一定要去掉mgls.dll文件的只读属性,要不就白忙活了。
之后在quartusII的tools 》 options 》 Modelsim-Altera里面选好了modelsim.exe对应的文件,这样就算是绑定完成了。
之后就是使用它进行仿真:
1.我们需要有一个已经编译通过了文件,我写的是一个计数器,由于优快云不支持VHDL的代码,没有高亮,对付看吧,哈哈:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY cnt IS
PORT(
CLK,RST,EN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);--5 places to 32bit
COUT : OUT STD_LOGIC);
END cnt;
ARCHITECTURE behave OF cnt IS
begin
PROCESS(CLK,RST,EN)
VARIABLE Q : std_logic_vector(4 downto 0);
begin
IF (CLK'EVENT AND CLK = '1') THEN--what is () for
IF RST = '0' THEN Q := (OTHERS=>'0'); --what is ; for
ELSIF EN = '1' THEN
IF Q<19 THEN Q:=Q+1;--is := really right?
ELSE Q:=(OTHERS=>'0');
END IF;
END IF;
END IF;
IF Q="10011" THEN COUT<='1';
ELSE COUT<='0';
END IF;
DOUT<=Q;
END PROCESS;
END behave;
编译通过之后就进行testbench的编写,两种方法,可以就直接生写或者套模板,也可以使用quartusII自带的模板生成功能:
这样的话就会生成一个.vht 文件在相应的工程文件夹下的:simulation 》modelsim 》XXX.vht里面,那也将会是一个好的模板,我采取的是第一种方法,直接写:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY cnttb IS --空实体
END cnttb;
ARCHITECTURE arc_cnttb OF cnttb IS --结构体
COMPONENT cnt IS --元件声明
PORT(
CLK,RST,EN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);--5 places to 32bit
COUT : OUT STD_LOGIC);
END COMPONENT;
signal CLK,RST,EN:std_logic;
signal DOUT : STD_LOGIC_VECTOR(4 DOWNTO 0);--5 places to 32bit
signal COUT : STD_LOGIC;
constant clk_period : time :=200 ns;
BEGIN
CNTT :cnt PORT MAP(clk=>clk,rst=>rst,DOUT=>DOUT,COUT=>COUT,EN=>EN); --元件例化
clk_gen:
PROCESS
BEGIN
clk<='1';
wait for clk_period/2;
clk<='0';
wait for clk_period/2;
END PROCESS;
tb:
PROCESS
BEGIN
rst<='0';
EN <='0';
wait for 100 ns;
rst<='1';
wait for 100 ns;
EN <='1';
wait;
END PROCESS;
END arc_cnttb;
写好了testbench之后就是开始仿真了,仿真吧:咦?错了!
需要先进行quartusII的配置才可以进行仿真:
点进去之后是这样的:
NEW一个testbench,name就是刚刚咱们写的第二个文件的名字,不用加.vhd,比如文件叫cnttb.vhd,里面的entity叫cbttb,那么这个name就叫cnttb,第三个要选的就是结束时间,比如2ms,文件名就是那个cnttb.vhd。
确定,保存,之后就可以启动rtl时序仿真了:
看起来还不错。
之前在仿真中遇到的最难受的两个问题:
写TESTBENCH的时候,信号声明的时候,不能有INOUT:
另外就是,TESTBENCH在assignment的时候有一个位置,如下图红标的位置,那里填写的是例化的标号:
祝学习顺利,工作愉快!