基于fpga的多功能波形发生器设计课程设计(编辑修改稿)内容摘要:

std_logic_vector( 3 downto 0 )。 档位选择信号 sss : in std_logic_vector( 4 downto 0 )。 波形选择信号 Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0)。 BCD 码输入 p180 : out std_logic。 预留接口 lcd : out std_logic_vector(7 downto 0)。 显示输出 shift : out std_logic_vector(3 downto 0)。 位码输出 dd, a : out std_logic_vector( 7 downto 0))。 波形、幅度数据输出 但实际上引脚 p180 是预留接口未用。 编译结果 图 9 编译结果 建立仿真文件 在编译通过后,要建立后缀为 vwf 的仿真波形文件。 执行菜单命令,选择 new,再选择需要的 Vector Waveform File,单击 ok。 在波形文件编辑方式下,右键选择 insert 添加信号节点,设置相应的参数。 如下图所示。 17 图 10 仿真波形文件建立 18 图 11 仿真波形参数设置 仿真结果 仿真结果如下图所示 19 图 12 仿真波形 RTL 视图 生成的 RTL 视图如下 20 图 13 RTL 视图 21 4 程序分析 语言分析 一个 VHDL 语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电 路,或者是一个计数器,也可以是一个 CPU,一般情况下,一个完整的VHDL 语言程序至少包括实体、结构体和程序包三个部分。 实体给出电路单元的外部输入输出接口信号和引用信息,结构体给出了电路单元的内部结构和信号的行为特点,程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。 第一部分是程序包,程序包是用 VHDL 语言编写的共享文件,定义在设计结构体和实体中将要用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为 IEEE 的程序包库中。 library ieee。 use。 use。 use。 第二部分是程序的实体,定义电路单元的输入 /输出引脚名称。 程序的实体名称可以任意取,但必须与 VHDL 程序的文件名称相同。 实体的标示符是 ENTITY,实体以 ENTITY开头,以 END 结束。 ENTITY fulladder IS PORT(a,b,Ci:in std_logic。 Co,s: out std_logic_vector(7 downto 0))。 END fulladder。 其中,定义了 a,b, Ci 为输入信号引脚,定义 Co,s 为输出信号引脚。 第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。 结构体有三种描述方式,分别是行为( BEHAVIOR)描述方式、数据流( DATAFLOW)描述方式和结构描述方式。 其中数据流描述方式又被称为寄存器( RTL)描述方式。 结构体以表示 ARCHITECHTURE 开头,以 END 结尾。 结构体的名称可以任取。 architecture behav of fulladder is BEGIN s=a xor b xor Ci。 Co=(a and b)or(a and Ci)or(b and Ci)。 END fulladder 上面程序段中结构体的描述方式属于程序流描述方式。 主要函数语句分析 在程序设计中,主要使用的函数语句有两种: Ifelse 语句和 casewhen 语句。 这两种语句也是 VHDL 程序设计中常用的语句。 二者都属于流程控制语句。 流程控制语句通过条件控制开关决定是否执行一条或几条语句或重复执行一条或 22 几条语句或跳过一条或几条语句。 IF 语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。 IF 语句的语句结构有以下三种: IF 条件句 Then 第一种 IF 语句结构 顺序语句 END IF IF 条件句 Then 第二种 IF 语句结构 顺序语句 ELSE 顺序语句 END IF IF 条件句 Then 第三种 IF 语句结构 顺序语句 ELSIF 条件句 Then 顺序语句 ... ELSE 顺序语句 END IF CASE 语句根据满足的条件直接选择多项顺序语句中的一项执行, CASE 语句的结构如下: CASE 表达式 IS When 选择值 = 顺序语句 When 选择值 = 顺序语句 ... END CASE 当执行到 CASE 语句时,首先计算表达式的值,然后根据条件句中与之相同的选择值。 执行对应的顺序语句,最后结束 CASE 语句。 表达式可以是一个整数类型或枚举类型的值, 也可以是由这些数据类型的值构成的数组。 23 5 小结 通过这次 FPGA 课程设计, 我 对 FPGA 的基本原理有了进一步的认识。 FPGA 的基础就是数字 电路 和 VHDL 语言 ,其 开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。 开发环境常用的有 Altera 公司的 Quartus II 和 Xilinx 公司 的 ISE,本次课程设计选用的是 Quartus II。 此次课程设计 暴露了 我 平时学习中的许多不足。 在设计的过程中我 遇到了一些问题, 比如 对 Quartus 软件的使用还不太熟悉,在编译的时候出现的错误不知道怎么解决,请教了很多同学才弄明 白。 还有进行仿真之前需要自己建立仿真波形文件,才能进行仿真等等,但在和老师、同学的交流下,最后我都解决了问题。 另一方面我也感受到 动手实践 的重要性。 动手实践是理论知识得以灵活运用的必要前提,也是今后 走上工作岗位之后能够很好的完成设计工作的技术保证。 FPGA 是实用性很强的课程,只有多学多用,边学边用,才能促进提 高自己的能力。 虽然课设完成了,但是我意识到,我对 FPGA 技术仅仅只是停留在入门的阶段, 想要有更大的发展,更深入的研究,还需要更多的努力与实践。 24 6 参考文献 【 1】 潘松 黄继业 . EDA 技 术与 VHDL(第二版) .北京:清华大学出版社, 【 2】 康华光 .电子技术基础 .北京:高等教育出版社 . 【 3】 付家才 . EDA 工程实践技术 .北京:化学工业出版社, 【 4】 汉泽西 . EDA 技术及其应用 .北京:北京航空航天大学出版社, 【 5】 赵刚 .EDA 技术简明教程 .成都:四川大学出版社, 【 6】 章彬宏 周正林 .EDA 应用技术 .北京:北京理工大学出版社, 【 7】 刘艳萍 高振斌 李志平 .EDA 实用技术及应用 .北京:国防工业出版社 , 25 7 附录源程序代码 library ieee。 use。 use。 use。 entity keshe is port(clk : in std_logic。 时钟信号输入 set, clr, up, down, zu, zd : in std_logic。 各个波形特征的调节触发信号 posting : in std_logic。 任意波键盘置入信号 u0,d0,sw : in std_logic。 方波 A、 B 的切换 sw,和方波 B 的幅度调节按键 ss : in std_logic_vector( 3 downto 0 )。 档位选择信号 sss : in std_logic_vector( 4 downto 0 )。 波形选择信号 Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0)。 BCD 码输入 p180 : out std_logic。 预留接口 lcd : out std_logic_vector(7 downto 0)。 显示输出 shift : out std_logic_vector(3 downto 0)。 位码输出 dd, a : out std_logic_vector( 7 downto 0))。 波形、幅度数据输出 end keshe。 architecture behav of keshe is subtype word is std_logic_vector( 7 downto 0 )。 type unit is array(63 downto 0) of word。 signal ram : unit。 signal qqq : integer range 0 to 250000000。 signal qq : integer range 0 to 78125000。 signal tmp : integer range 0 to 9999。 signal coun : integer range 0 to 78125000。 signal coun0 : integer range 0 to 250000000。 signal b : integer range 0 to 78125000。 26 signal c : integer range 0 to 500000000。 signal z, con : integer range 0 to 63。 signal f : std_logic_vector( 7 downto 0 )。 signal amp, amp0, d : std_logic_vector(7 downto 0)。 signal bcd0,bcd1,bcd2,bcd3 : integer range 0 to 9。 signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9。 signal bcd00,bcd10,bcd20,bcd30 : integer range 0 to 9。 signal y : integer range 0 to 9。 signal addr : integer range 0 to 63。 begin qq=781250 when ss=1000 else。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。