1)新建一个VHDL文件,代码如下:
LIBRARYIEEE
USEIEEE.STD_LOGIC_1164.ALLUSEIEEE.STD_LOGIC_UNSIGNED.ALLUSEIEEE.STD_LOGIC_ARITH.ALLENTITYCNT4IS
PORT(CLK:INSTD_LOGIC
Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0))
ENDCNT4
ARCHITECTUREBEHOFCNT4IS
SIGNALQ1:STD_LOGIC_VECTOR(3DOWNTO0)BEGIN
PROCESS(CLK)BEGIN
IFCLK'EVENTANDCLK='1'THENQ1<=Q1+1ENDIFENDPROCESSQ<=Q1ENDBEH
2)
按菜单栏Processing|StartCompilation进行编译,也可以按工具栏上的快捷键。编译完,按菜单栏
Processing|Start|StartTestBenchTemplateWriter,成功后,按菜单栏File|Open,耐旁或打开E:\CNT4\simulation\modelsim\,选择CNT4.vht文件昌伍。得到的是testbench文件的一个模板。代码如下:
LIBRARYieee
USEieee.std_logic_1164.all
Toplevelmodule
ENTITYCNT4_vhd_tstISENDCNT4_vhd_tst
ARCHITECTURECNT4_archOFCNT4_vhd_tstIS--constants--signals
SIGNALCLK:STD_LOGIC:='1'
SIGNALQ:STD_LOGIC_VECTOR(3DOWNTO0)COMPONENTCNT4PORT(
CLK:INSTD_LOGIC
Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0))
ENDCOMPONENTBEGIN
Designinstancename
i1:CNT4PORTMAP(
--listconnectionsbetweenmasterportsandsignalsCLK=>CLK,Q=>Q)
init:PROCESS
--variabledeclarationsBEGIN
--codethatexecutesonlyonce
WAIT
ENDPROCESSinitalways:PROCESS
--optionalsensitivitylist--(
)
--variabledeclarationsBEGIN
--codeexecutesforeveryeventonsensitivitylistWAIT
ENDPROCESSalwaysENDCNT4_arch
做如下修改:
LIBRARYieee
USEieee.std_logic_1164.all
ENTITYCNT4_vhd_tstISENDCNT4_vhd_tst
ARCHITECTURECNT4_archOFCNT4_vhd_tstIS
--constants--signals
SIGNALCLK:STD_LOGIC:='1'
给时钟信号赋初值
SIGNALQ:STD_LOGIC_VECTOR(3DOWNTO0)COMPONENTCNT4PORT(
CLK:INSTD_LOGIC
Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0))
ENDCOMPONENTBEGINi1:CNT4PORTMAP(
--listconnectionsbetweenmasterportsandsignalsCLK=>CLK,Q=>Q)
always:PROCESS
--optionalsensitivitylist--(
)
--variabledeclarations
BEGIN
WAITFOR50NS等待50nsCLK<=NOTCLK
对时钟信号取反
ENDPROCESSalwaysENDCNT4_arch
3)保存之后按菜单栏Assignments|Setting,如下图所示。
4)按菜单栏Tools|RunEDASimulation|EDAGateLevelSimulation:
5)等待片刻启塌后会d出如下窗口,就是模4计数器的波形图。
Quartus 中调用modelsim的流程1. 设定仿真工具
assignmentèsettingèEDA tool settingèsimulation 选择你需要的工具。
clip_image001
2. 自动产生测试激励文件模板:
processingèstartèStart test bench template writer
clip_image003
我们点击之后系统会自动在目录:当前文件夹è simulation è modelsim (这个文件夹名字跟你选的仿真工具有关) 中产生一个测试激励文件 xxx.vt(Verilog test bench) 或者 xxx.vht(VHDL test bench), 文件名跟你工程中的Top module 的名字一样, 后缀为.vt或者.vht。
clip_image004
3. 编辑走动生成的test bench文件
我们加入自己需要的激励以及初始化语句,这里我们还要修改test bench的模块名字为tb(我们会看到这个名字和后面的设定有联系)。
clip_image005
4. 连接test bench,我们需要从Quartus中自动调用仿真工具,所以需要设定Native Link选项。
a) 还是在simulation的设置页面里,设定 Native Link对话框中的设定。我们这里因为需要工具自动调用激励所以选中
clip_image007
b) 点击右边的Test Benches, 我们需要在这里设定一个相关联的test bench.
clip_image009
这里会d出一个让你指定test bench的对话框,因为我们之前没有指定任何的test bench,所以这里是空白的。
c) 指定test bench
因为我们是第一次产生test bench,点击new.
clip_image011
点击New之后会产生一个New Test bench setting的对话框,在这里你将test bench和你的相应的test bench file进行绑定。
clip_image013
我们这里在Test bench name的对话框中输入一个名字”my_1st_tb”, 我们将看到,在下面的神丛宴Top level module in test bench对话框中也自动显示”my_1st_tb”. 注意这个名字应该和你的test bench 中的module name一直,我们之前在第3步的时候将test bench的module name已经改成了tb,所以我们这里应该把对话框中的名字改成tb。
clip_image014
d) 加入test bench文件
clip_image016
5. 进行仿真
当这些设定都完成郑乎了之后, 选择菜单
toolèRun EDA Simulation toolèEDA RTL simulation
clip_image017
就可以直接调用modelsim进行仿真。
6. 小技巧:
我们这样调用仿真,如果是Modelsim AE每次不会编译lib文件,但如果我们使用的是Modelsim SE版本,每次调用都需要重新编译库,非常不爽,在这里游银我们建议自己修改脚本文件,进行仿真.
a) 当我们按照之前的描述,运行完仿真之后,停留在Modelsim的界面。
b) 在Modelsim界面的命令行上,我们点向上的方向键,就会出现我们上一条指令, 我们可以看到是
do xxxx.do 这说明工具执行的上一个命令式 xxxx.do这个脚本文件,我们这里的例子是
do oversampling_core_run_msim_rtl_verilog.do
clip_image019
i. 我们知道了工具执行的脚本,我们就可以按照自己的想法去改变这个脚本了。使用
edit oversampling_core_run_msim_rtl_verilog.do命令,可以看到这个脚本的内容(当然我们也可以使用Ultra Edit或者VIM等文本编辑软件去打开这个脚本文件)。这个脚本通常分成3部分 库文件编译部分,设计文件编译,运行参数设定和开始执行部分
clip_image021
ii. 通常来说库文件只在第一次编译的时候,需要编译,后面我们只需要在仿真的时候指定库文件的位置就好了,不需要每次都编译。因此我们可以注释掉“库文件编译部分”。下面图中红色框中的部分就是被注释掉的库编译部分,这样会节省我们的仿真时间,注意在脚本语言中#是注释符。
clip_image023
iii. 我们将编辑过的脚本文件另存为sim.do, 在以后的仿真中我们可以在Modelsim命令行中,直接在脚本中运行do sim.do(当然是先需要将Modelsim的工作目录改到 工程所在文件夹/simulation/modelsim/)。
c) 另外脚本生成的波形文件通常是将test bench的顶层加入到图形画面中我们可以看到在脚本的第3部分(运行参数和开始执行)部分,默认命令式
add wave *, 这条命令就是讲 test bench顶层的所有信好加入到wave窗口中。
clip_image024
对我们来说,在调试阶段,有很多底层信号都是想观测的,所以需要再手动修改一下命令
i. 在modelsim的窗口中,选中自己想要关心的模块,右键可以将自己关心的信号加入wave波形中
clip_image026clip_image028
ii. 此时我们在wave 窗口中可以将这个波形的格式存下来,在wave窗口中点菜单fileèsave… 选择文件名为wave.do.
clip_image030
iii. 在我们执行的脚本中将add wave *,这个命令替换成do wave .do, 就可以在每次执行仿真的时候自动添加想要观测的波形了。
clip_image024[1] clip_image031
7. 接下来最后一个问题,怎样才能一次性的编译好库文件,让软件不再每次编译。其实altera已经为客户准备了相应的选项,只不过藏得比较深,不好找。
a) 一次性编译库:
i. 点击toolè launch EDA simulation Library Compiler
clip_image033
ii. 我们会看到一个让我们选择器件的页面。根据你的实际情况选择下面的设定。点击start compile,软件会自动帮你完成编译,然后关掉就好,至此你应该已经完成了库的编译。
clip_image035
iii. 接下来我们需要在QII的仿真设定页面做一些修改。
我们需要回到设定界面
Assignmentèsettingèsimulationèmore Nativelink setting
clip_image037
设定好相应的路径。
clip_image039
好了,重新run仿真,就发现不会再编译我们的库文件了。
高阻态这是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定。 高阻态的实质: 电路分析时高阻态可做开路理解。你可以把它看作输出(输入)电庆拦阻非常大。他的极限可以认为悬空。也就是说理论上高阻态不是悬空,它是对地或对电源电阻极大的状态。而实际应用上与引脚的悬空几乎是一样的。 高阻态的意义: 当门电路的输出上拉管导通而下拉管截止时,输出为高电平反之就是低电平如上拉管和下拉管都截止时,输出端就相当于浮空(没有电流流动),其电平随外部电平高低而定,即该门电路放弃对输出端电路的控制 。RT
刚学的VHDL语言,用quartus10.1写好一个3-8译码器后,经过start compilation =>start test bench templte writer,生判差肆成了.vho和.vht2个文件,然后调用modelsim仿真,可是出现的只有红线,是不是少了什掘轿么激励信号啊?如果是的话应该怎样用VHDL写这个激励信号,然后加入工程进行仿真呢?是不是所有的激励信号都差不多呢?小弟初学quartus,还有好多不明白的地方啊,一个仿真搞得头都大了,哪位达人具体介绍一下吧····
3-8译码器程序:
library ieee
use ieee.std_logic_1164.all
use ieee.std_logic_ARITH.ALL
use ieee.std_logic_UNSIGNED.ALL
entity decoder is
port(a,b,c,e1,e2,e3:in std_logic--in design
y:out std_logic_vector(7 downto 0) --out design
)
end decoder
architecture rt1 of decoder is
signal indata: std_logic_vector(2 downto 0)--signal design
begin
indata<= c&b&a
process(indata,e1,e2,e3)
begin
if(e1='0'and e2='0'and e3='1') then
case indata is
when "000"=>y<="11111110"
when "001"=>y<="11111101"
when "010"=>y<="11111011"
when "011"=>y<="11110111"
when "100"=>y<="11101111"
when "101"=>y<="11011111"
when "110"=>y<="10111111"
when "111"=>y<="01111111"
when others=>y<="11111111"
end case
else
y<="00000000"
end if
end process
end rt1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)