当前位置:文档之家› 数电课程设计

数电课程设计


Quartus II
VHDL的特点
VHDL具有强大的功 能,覆盖面广,描述 能力强
VHDL有良好的可读性
推荐用行为描述方式抽象 地描述电路的模型
课 题
过程控制系统 状态机
采集控制 执行控制
ADC0809转换工作时序
1.送地址 2.启动
结束
3.结束 4.允许输出 5.得到数据
允许输出
FPGA与DAC0832接口电路原理图
DAC0832 输出控制时序图
时间表
课代表 每人交一个报告,报告名为学号 姓名,例如04103026高某
上机E楼203 • 第四周,9月25日18:3021:45 上交电子文档(PDF、 Word、WPS文档均可)
附:详尽注释的VHD文 件、统计报告、详加说明 的仿真波形、采集电路图 、执行电路图。。。
标文件
计算机并口 器件编程接口
PCB Board 3
2014-10-3
ARCHITECTURE behave OF cntm7 IS --结构体描述 BEGIN PROCESS (clk,rst) VARIABLE cqi :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF(rst=‘0’) THEN cqi :=“0000”; --计数器复位 ELSIF (clk„EVENT AND clk = ‟1‟) THEN --检测时钟上升沿 IF (en=‘1’) THEN --计数过程 计算机语言描述特点是 :顺序性 IF cqi < 6 THEN cqi :=cqi+1; --允许计数,且计数<6 ELSE cqi :=“0000”; --计数状态=6,下一状态清零 END IF; END IF; HDL语言描述 END IF; 特点是:并行 性 IF cqi = 6 THEN co <= ‘1’; --输出进位信号 ELSE co <=‘0’; END IF; qcnt <= cqi; --状态输出到端口 END PROCESS; END behave;
课程设计Q&A Q:部分程序如下,为何时序仿真与功能仿真都不能输出原频clk?而且时序仿真 与功能仿真结果相反? port(clk:in std_logic; clk1:out std_logic); ……… begin if (clk'event and clk ='1') then clk1<=clk; ……….
课程设计Q&A
Q: 波形编辑 A: 仿真大规模电路的特性,必须在输入端尝试足够多的取值组合并观察输出是否满足 要求。在一大规模电路中,可能的输入取值组合数量庞大,所以在实际中仅选取相对 少量(但有代表性)的部分输入取值组合。但对初学者设计的小规模电路,应该仿真 所有输入取值组合。
Q: 在Node Finder中点“List”输入信号节点时,提示“no matches” 。 A: 在“Filter”选“Pins:all”,单击“List”按钮,即可显示工程中所有端口引脚名称。 Q:使用functional,timing和timing using fast timing model这三种格式进行仿真时有什 么区别,什么时候用functional形式进行仿真,什么时候用timing形式进行仿真,什么 时候该用timing using fast timing model形式进行仿真? A: 在Quartus II的Simulator tool中,可以设置仿真的类型,一般来讲分为functional、 timing和timing using fast timing model仿真三种。functional仿真验证逻辑特性,不利 用延时信息。编译(综合和布局布线)完成后,利用设计器件的延时数据可以进行 timing仿真。timing仿真利用器件最差情况下的延时模型验证逻辑特性。fast timing model仿真也是一种timing仿真,但需要利用额外提供的最优延时数据。
课程设计Q&A
Q:时序仿真对,功能仿真不对,怎么办? A: 最好两个都对,要求不高,也可以时序为准。两者主要的区别在于延时,时序仿真 是真正的模拟内部走线和逻辑延时进行的,功能仿真只是功能逻辑的验证不涉及延时, 一般功能仿真通过,时序仿真错误,主要原因是延时不满足,如对频率要求不高,建 议降频仿真。
数字电路课程设计
——EDA技术与应用
董瑞军 编制
西安电子科技大学
2014-10-3
1
毫不夸张地说,学习能力是“元能力”,是一切能力之母;学习成功是“元 成功”,是一切成功之母 所谓教育,应在于 学校知识全部忘光 后仍能留下的那部 分东西
为在校生提供就业 机会?
FPGA 是一种半定制集成电路,在其内部集成了 大量的门和触发器等基本逻辑电路,用户通过编程 来改变FPGA内部电路的逻辑关系或连线,就可以得 到需要的设计电路。可编程逻辑器件的出现,改变 了传统的数字系统设计方法,其设计方法为采用 EDA 技术开创了广阔的发展空间,并极大地提高了 编程目 PLD 电路设计的效率。
Q:时序仿真的延时是如何产生的,能否消除或减小? A: 时序仿真包含了器件和布线的延时,改变器件和布线,能够减小。不能消除。 Q:延时和最高工作频率。 A:延时一般不能超过一个时钟周期。 Q:如何产生延时? A: 要产生延时,信号必须经过一定的物理资源。在硬件描述语言中有关键词Wait for xx ns,需要说明的是该语法是仅仅用于仿真而不能用于综合的。在分立电路中,使 用多级非门是可行的。但在EDA中,开发软件在综合设计时会将这些门当作冗余逻辑 去掉,达不到延时的效果;对于大的延时(>100ns),锁存是最常用的可综合延时方法 : 我们知道当一个信号用时钟锁存一次,将会占用一个触发器资源,信号会向后推移一 个时钟周期。
课程设计Q&A
library ieee; use ieee.std_logic_1164.all; entity dianti is port(destination:in std_logic_vector(7 downto 0); floor:in std_logic_vector(1 downto 0); ud:out std_logic_vector(2 downto 0)); end dianti; architecture simple of dianti is begin if(floor='00') then { case destination is when 00000000=> ud<=001; when others=> ud<=100; end case; } elsif (floor='11') then 。。。
2014-10-3
• 第七周,10月16日
16
课程设计Q&A
2014-10-3
55
• 设计步骤:
创建 一个 工作 目录 创建 一个 工程, 工程 名最 好与 顶层 文件 同名
描述、 编译、 仿真 每个 实体, 实体 名最 好与 程序 文件 名同 名
Q:不知该怎么选择可编程逻辑器件? A: PLD芯片的特点和性能,初学者可以跳过,等需要考虑设计的效率和可靠性时,再 仔细了解。选择可编程逻辑器件时,应着重了解一下几个方面的内容: (1)器件各管脚的功能及结构特点。 (2)器件安全工作需要的条件,例如工作电压、能承受的最大功率、环境温度等。 (3)器件的动态特性,例如器件固有延时、工作频率、负载电容限制等。 (4)开发器件需要哪些硬件、软件资源。 (5)器件的价格功能比如何。 Q: 《数字电子技术基础》285页:cou<=(others=>„0‟);是什么意思? A: 短语(others => x )是一省略赋值操作符 它可以在较多位的位矢量赋值中作省略化 的赋值 如以下语句 SIGNAL d1,d2 e : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL f: STD_LOGIC_VECTOR(4 DOWNTO 0); ... d1 < = (others = >'0'); 这条语句等同于 d1 < = “000000000” 但其优点是在给大的位矢量赋值时,简化了表 述,明确了含义,这种表述与位矢量长度无关。利用属性range也可达到同样目的: d1<=(d1‟range=>‟0‟)。利用(others => x )可以给位矢量的某一部分位赋值之后再使用 others给剩余的位赋值。如 d2 < = (1 = >'1',4 = >'1', others = >'0'); 此赋值语句的意义是给位矢量 d2 的第 1 位和第 4 位赋值为„1‟,而其余位赋值为„0‟。
A:if (clk'event and clk ='1') then为上升沿判定,只有当上升沿到来时才会将 clk1<=clk执行一次,执行完后进程将被挂起,只有当下个上升沿到来时才会 再次执行。因此下降沿到来时clk1的值仍然不变。时序仿真与功能仿真结果 相反则是因为时序仿真有延时,当上升沿到来时是把之前的0赋值给clk1;而 功能仿真无延时,当上升沿到来时把此时clk的值1赋给clk1。
5
课程设计Q&A
。。。 architecture kai of lift is signal k,p:integer; signal tmp:std_logic_vector(6 downto 0); begin process(clk) begin if clk'event and clk='1' then if (a>c) then k<=a; tmp<= "1001111" when k=1 else "0010010" when k=2 else "0000110" when k=3 else 并行语句——出现在结构体中,各语句并行(同 "1001100" when k=4 else 步)运行,与书写的顺序无关。 "0100100" when k=5 else "0100000" when k=6 else "0001111" when 电子技术基础》289页:if (couL=9 and couH=5) then couL<="0000"; 括号中为什么可用couL=9(整数)? A: std_logic_unsigned程序包对std_logic_vector类型数据的算术和关系运算操作符做 了定义,允许这样的使用。 Q:使用wait until语句,为什么不能在process语句中列出敏感量? A: process语句中的敏感量表和wait语句的作用一致,都是进程启动、触发的条件。 这样,为了不产生两个进程启动条件,避免使进程产生误触发,在process语句中, 敏感量表和wait语句不能共同存在于一个进程之中。 Q: 1个process中,能否在时钟的上升沿和下降沿同时检测赋值? A: 绝大多数PLD不支持双触发沿,Xilinx公司CoolRunner系列CPLD除外。 Q:如何将各模块连接起来? A: 方法一:利用元件例化语句,将顶层文件通过VHDL语言描述实现。 方法二:按照逻辑功能关系,用原理图的方式将其连接起来。 先将各模块代码转换成顶层文件中可以调用的元件,并将生成的.bsf文件及.vhd文件 复制到工程文件夹中。在顶层的.bdf文件中调用各个元件并连线、设定输入输出端口。 最后,编译,仿真。
相关主题