完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这里给出大部分的文字,工程和完成的在附件里,我实在懒得在把文档补齐截图 Modelsim 进行VHDL仿真的预备知识 这里即将介绍使用Modelsim 进行VHDL仿真的预备知识(大部分参考至网络,文章后面会给出参考链接) 一.Modelsim简介 Modelsim仿真工具是Modelsim公司开发的。它支持Verilog、VHDL以及他们的混合仿真,它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意寄存器的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等,比quartus自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。 对于初学者,modelsim自带的教程是一个很好的选择,在Help->SE Documentation-> PDF BookCase ModelSim SE Tutorial里面.它从简单到复杂、从低级到高级详细地讲述了modelsim的各项功能的使用,简单易懂。但是它也有缺点,就是它里面所有事例的初期准备工作都已经放在example文件夹里,直接将它们添加到modelsim就可以用,它假设使用者对当前操作的前期准备工作都已经很熟悉,所以初学者往往不知道如何做当前操作的前期准备。 Modelsim仿真方法 Modelsim的仿真分为前仿真和后仿真,下面先具体介绍一下两者的区别。 1 前仿真 前仿真也称为功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。可综合FPGA代码是用RTL级代码语言描述的,其输入为RTL级代码与Testbench。 2 后仿真 后仿真也称为时序仿真或者布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,是否存在时序违规。其输入文件为从布局布线结果中抽象出来的门级网表、Testbench和扩展名为SDO或SDF的标准时延文件。SDO或SDF的标准时延文件不仅包含门延迟,还包括实际布线延迟,能较好地反映芯片的实际工作情况。选定了器件分配引脚后在做后仿真。 二.仿真前的准备工作: 这里将使用Quartus II13.1和Modelsim Ae进行功能仿真(Modelsim Ase 版本是需要购买的,破解的话会有各种问题,免费版本Modelsim Ae就够用了),当然Modelsim 也是可以进行时序仿真的。 2.1 建立基础工程: 建立基础工程的基本步骤这里省略掉,主要讲下建立时的注意事项: 如下图设置即可: 这里提供另一种设置的方法:工程建立后可以在Settings里修改: 2.2 建立Quartus II 与Modelsi-ae的关联(方便在Quartus直接调用Modelsim) 完成上述工作之后需要在Quartus II 中设置modelsim-ae 路径,QuartusII 菜单Tools—>Options->General—>EDA Tool Options,进行相关设置,如如图 三. 输入RTL级代码和Testbench文件 RTL级代码和Testbench的相关语法,请参考其他书籍,这里不予讲述,主要讲解如何快速进行功能级仿真。 3.1建立一个Testbench 完成RTL级代码的工作,确认RTL级是可综合的后(基本要求),按下面的教程新建一个Testbench测试工作台: A. 使用Quartus ii 软件新建一个Testbench 脚本的模板: 点击选项卡Processings->start->start testbench template write(这里截图技术不过关 >-<) 完成后可以在一下的文件夹找的生成的文件(*.vht): 工程目录+ simulationmodelsim 打开后便可以开始编辑 这里给出我修改好的代码:(重要的代码已给出提示) --Copyright (C) 1991-2013 Altera Corporation -- Youruse of Altera Corporation's design tools, logic functions -- andother software and tools, and its AMPP partner logic --functions, and any output files from any of the foregoing --(including device programming or simulation files), and any --associated documentation or information are expressly subject -- to theterms and conditions of the Altera Program License --Subscription Agreement, Altera MegaCore Function License --Agreement, or other applicable license agreement, including, --without limitation, that your use is for the sole purpose of --programming logic devices manufactured by Altera and sold by -- Alteraor its authorized distributors. Pleaserefer to the --applicable agreement for further details. --*************************************************************************** -- Thisfile contains a Vhdl test bench template that is freely editable to -- suituser's needs .Comments are provided in each section to help the user -- fillout necessary details. --*************************************************************************** -- Generatedon "11/29/2015 18:15:24" -- VhdlTest Bench template for design : top_control -- --Simulation tool : ModelSim-Altera (VHDL) -- LIBRARYieee; USEieee.std_logic_1164.all; useieee.std_logic_unsigned.all; useieee.std_logic_arith.all; ENTITYtop_control_vhd_tst IS ENDtop_control_vhd_tst; ARCHITECTUREtop_control_arch OF top_control_vhd_tst IS --constants constant clk_period: time:=10ns; --signals SIGNAL clk : STD_LOGIC:='1'; SIGNAL key : STD_LOGIC_VECTOR(2 DOWNTO 0):="000"; SIGNAL led : STD_LOGIC_VECTOR(5 DOWNTO0):="111111"; SIGNAL rst_n : STD_LOGIC:='0'; signal key_cnt: STD_LOGIC_VECTOR(7 downto 0):="00000000";--initial !!importance --variablekey_cnt: integer range 0 to 255 :=0; COMPONENTtop_control PORT ( clk : IN STD_LOGIC; key : IN STD_LOGIC_VECTOR(2 DOWNTO 0); led : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); rst_n : IN STD_LOGIC ); ENDCOMPONENT; BEGIN i1 : top_control PORT MAP ( -- listconnections between master ports and signals clk => clk, key => key, led => led, rst_n => rst_n ); init :PROCESS --variable declarations BEGIN -- code thatexecutes only once rst_n <= '0'; wait for 100ns; rst_n <= '1'; wait; ENDPROCESS init; always :PROCESS --optional sensitivity list -- ( ) --variable declarations BEGIN -- code executes for every event onsensitivity list wait for clk_period; clk <= '1'; wait for clk_period; clk <= '0'; ENDPROCESS always; tst :PROCESS --optional sensitivity list ( clk ) --variable declarations BEGIN -- code executes for every event onsensitivity list if(clk'event and clk = '1') then key_cnt(7 dowNTO 0) <= key_cnt(7 dowNTO 0) + '1';-- therule of write !!importance case key_cnt is when "00000001"=> key <= "011";-- when "01000000"=> key <="101";-- when "10000000" => key <="110";--legal when "11111001"=> key <="000";--illegal when "11111010"=> key <="001";-- when "11111011"=> key <="010";-- when "11111100"=> key <="100";-- when "11111101"=> key <="111";-- when others => NULL; end case; end if; ENDPROCESS tst; END top_control_arch; B.settings->edatool settings->simulate: C.在弹出的对话框点击new(忽略existing testbench settings 这是我建立过的一个) D.命名testbench 文件,下图第二个方框的命名规则:工程名_vhd_tst (这里指的是使用步骤A建立的Testbench 脚本)比如我的Top_control_vhd_tst。 E.接下来就可以开始仿真了,Tool->start simulation->run simulate tool->Rtl simulation(当然这里必须确保Testbench脚本语法正确和模型正确,即激励) F.给出我功能仿真的结果:在我给出的工程目录下; 四,常用操作(演示): 1. restart 2. stop 3. 测量边沿的时间 4. 设置显示的格式 五.仿真工程讲解: 功能:利用硬件描述语言设计一自定义译码器,其主要功能为下表所示: SW0 SW1 SW2 SW3 LED0~LED5 ↓ x x x 流水点亮 1 ↓ x x 间隔点亮 1 1 ↓ x 追逐点亮 1 1 1 ↓ 全部亮,并闪烁 其中,↓表示有键按下,1表示无键按下,x表示不管有没有按键; 流水点亮即为LED0先亮,然后LED0灭,LED1亮,依次类推;间隔点亮即为第一状态为LED0亮,第二状态为LED0保持亮、LED2亮,依次类推;追逐点亮即为第一状态为只有LED0亮,第二状态为LED0保持亮、LED1点亮,依次类推。 备注:由于板子上没有复位管脚,我就把按键输入改为三个(通过改变译码的结果演示四种结果) 这里我使用了按键输入和led显示的两个模块,工程相对简单,大家照着要求和自己对语法的理解可以看懂的(我也相信我代码的逻辑很清晰>-<)。 参考资料: http://blog.sina.com.cn/s/blog_6c7b6f030101ctlh.html Modelsim的基本命令: ·project compileall//编译所有工程文件 ·vlib work//该目录下新建一个work目录 ·vmap work work//将目前的逻辑工作库work和实际的工作库work映射 对应 ·vlog file.v//编译对应的文件 ·vsim tb_module_name//仿真命令,注意testbench为模块名 ·view wave/dataflow//打开波形或数据流窗口 ·add wave -hex * //*表示添加设计中所有的信号,-hex表示以十六进制 来显示波形窗口中的信号值 ·add wave /tb_module_name/ * //模块中所有信号加入波形文件 ·restart -f//重新执行仿真 ·run/run -all//运行仿真 ·run time //运行仿真时间 ·quit -sim //结束退出仿真 ·pwd //transcript窗口显示当前路径(一般不用) ·cd //改变工作路径(一般不用) ·do file.do//运行do文件
|
|
相关推荐
|
|
正需要,谢谢分享。
|
|
|
|
|
|
VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言
|
|
|
|
|
|
写得很棒,学习一下
|
|
|
|
|
|
非常感谢分享!!!!
|
|
|
|
|
|
1367 浏览 1 评论
助力AIoT应用:在米尔FPGA开发板上实现Tiny YOLO V4
1046 浏览 0 评论
2442 浏览 1 评论
2146 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
2408 浏览 0 评论
1895 浏览 50 评论
6018 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:26 , Processed in 0.586352 second(s), Total 51, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号