1、最近一直在学 stm32,怕时间久了 FPGA 生疏,就重新做了下八选一的波形发生器,用 lpm_rom 做,做完之后再用 quartus 进行功能仿真和时序仿真,主要是把实验流程记录下来。 以免过阵子又忘了。 一、设计输入 Step1 打开 Quartus 软件,新建工程: File - New Projiect Wizard,设置工程文件夹存放位置 以及工程名 一路 Next,到 Page3 of 5 选器件,我的是 Cyclone II EP2C8Q208C8,然后又是 Next 直到 Finish。 Step2 新建文件 *.bdf 文件, 采用原理图输入: File - New -
2、Design - Block Diagram/Schematic File,OK!新建一个*.bdf 文件。 Step3 新建 mif 文件,这个文件用来装 lpm_rom 初值:File - New - Memory Files - Memory Initialization File,OK。 字数为 256,字的位数为 8,一会儿建 lpm_rom 再细讲。点 OK。用 MATLAB 生成 sin 波形的 初始值,装入 mif 文件。总共有 256 个值,装好之后如下 在 wave_sel_8_1 工程文件夹下新建一个 mif 文件夹,用来装初始化文件。把新建的 mif 文件 保存到 mi
3、f 文件夹下,名字为 sin.mif。这个文件用来装 sin 波形的初始值。 Step4 对新建的 *.bdf 文件进行编辑。 双击空白部分,出现 Symbol 窗 口,在 Libraries 一栏选择 d:/altera/90/quartus/libraries. - megafunctions - storage - lpm_rom。点 OK,出现下图 进行 lpm_rom 配置: output file 选择 VHDL 或 Verilog HDL,这个是没什么影响的。 lpm_rom_sin 是修改后的名字。 Next Output 位宽为 8 位,memory 为 256 个字。由于位
4、宽是 8 位,所以每个字也是 8 位,256 个 字即 memory 的深度,需要 8 位地址线可寻址,28 = 256。所以地址线宽度为 8,说明可寻址 深度是 28 = 256。输出宽度为 8,说明每个存储单元是 8 位。 一路 Next 直到这里 这是新建的 memory 初始化,点 Browse,在 mif 文件夹下,找到 sin.mif 文件。路径如下: 一直 Next 到最后一步 这几个文件暂时还搞不清楚,都选上吧。暗色的是不能更改的。 Finish 之后出现 选 Yes,在 bdf 文件上单击鼠标,刚才新建的 lpm_rom_sin 就放到工程里了。 Step5 到此为止,一个完
5、整的 lpm_rom_sin 做好了,现在最重要的是要保存成果。把这个 bdf 文件保存在 wave_sel_8_1 文件夹下,名字为 wave_sel_8_1.bdf。重复 step3 和 step4,依次 把 lpm_rom_triangular、lpm_rom_square、lpm_rom_sawtooth1、lpm_rom_sawtooth0、lpm_ro m_ladder、lpm_rom_stair1 、lpm_rom_stair0 剩下的 7 个 lpm_rom 做好。这 8 个波形依次是 正弦波、三角波、方波、锯齿波 1(向上)、锯齿波 0(向下)、梯形波、阶梯波 1(向上)、
6、阶梯波 0(向下)。就是麻烦,小心仔细一点就 OK 了。 好了,8 个波形 ROM 产生了,还差一个计数模块和一个选择模块。最麻烦的部分已经做完了, Ctrl + S 一下,然后休息一下。 Step6 新建计数模块, File - New - Design - VHDL Files 保存为 count.vhd,放在 wave_sel_8_1 下。 右键 count.vhd - Create Symbol Files for Current File。 回到 bdf 文件下,双击空白部分 选择 Project - COUNT,点击 OK。放入工程中。Crtl + s。养成保存的好习惯。 Step
7、7 新建选择模块, File - New - Design - VHDL Files 保存为 SEL8_1.vhd。剩下步骤同 step6。 Step8 所有的模块都已经做好了,就剩下输入、输出管脚了。还是双击 bdf 文件的空白部分 直接在 Name 中输入 input,点 OK。Output 也一样,总共需要 3 个输入,一个输出。3 个输 入分别是 CLK、CLRn 、in_sel20(这个是总线,3 跟,器选择作用)。一个输出是 output70。选中的波形就通过这个 output 输出。 Step9 连线,最后结果是 有事没事就按 Ctrl + S。现在看一下整个工程的目录结构 然后
8、就得仿真了,仿真的目的是在软件环境下验证电路的行为和设想中的是否一致。功能仿真 是在设计输入之后,是没综合、布局布线之前的仿真,又叫行为仿真或前仿真,不考虑电路的 逻辑和门的时间延时,着重考虑电路在理想环境下的行为和设计构想的一致性。时序仿真又称 后仿真,是在综合、布局布线时候,即电路以及映射到特定的工艺环境后,考虑期间延时的情 况下对布局布线的网标文件的一种仿真,器件延时信息是通过反标时序延时信息来实现的。 二、功能仿真 我用的是 Quartus II 9.0,以前装过 Quartus II 11.0,根本就没有波形文件这一说,当然就仿不 了真了,所以又换回来了。 Step1 新建一个波形文
9、件: File - New - Verification/Debugging Files - Vector Waveform File。 Step2 添加节点,双击红色区域,出现下图 点击 Node Finder 一路 OK 返回 保存为 Step3 设置仿真截止时间: Edit - End time。截止时间为 1ms。 Step4 设置时钟周期为 20ns,如下 Step5 设置复位信号 CLKn Step6 设置选择信号 in_sel 设置选择信号设置为 10.24us(1024ns)加 1,时钟周期为 20ns,即每 512 个周期选择信号 加 1,而每个波形的取样值为 256 个,所
10、以最终结果是每个波形出现两次然后接着出现下一个 波形。 Step7 设置仿真模式 Assignments - Settings - Simulator Settings Step8 生成功能仿真网表。 Step9 到现在为止都没有编译过整个工程,功能仿真只是验证它的行为是不是符合设计要求, 不需要编译,查看 Task 栏 点击 开始功能仿真。漫长的等待,这个时候总是相当紧张的。 OK,看波形之前进行简单的设置 出现 OK Y OK 8 个波形依次出现,每个波形两个周期。如果把 in_sel 信号的时间设为 512ns,则每个波形出 现一次,如下 出现的顺序很有意思,可以想一下为什么是这样。最先建波形的却最后出现。 三、时序仿真 时序仿真之前得综合、布局布线。 Step1 综合,右键 - start Step2 布局布线 ,,同上 完了之后任务栏状态为 Step3 设置仿真模式 Assignments - Settings - Simulator Settings Step4 点击 仿真,经过一些简单的设置后出现波形 整个过程没有管脚分配及时序约束,这应该是在设计输入中完成的。编程与配置也没做。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。