资源预览内容
第1页 / 共52页
第2页 / 共52页
第3页 / 共52页
第4页 / 共52页
第5页 / 共52页
第6页 / 共52页
第7页 / 共52页
第8页 / 共52页
第9页 / 共52页
第10页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第8章 VHDL与原理图层次型混合设计 【学习目标】 通过本章学习应掌握EDA技术中的 模块化设计方法、利用VHDL与原理图 自底向上和自顶向下混合设计方法。 8.1 自底向上混合设计 简易时钟计数电路设计 1. 时钟计数电路结构图 时钟电路的组成由两个模为60的计数器和一个模 为12的计数器构成 2.模块电路的VHDL描述 采用混合设计输入方法,先建立两个VHDL文本 文件,分别将模为60的8421BCD计数器和模为12的 计数器代码输入,然后再建立顶层原理图文件。 (1)模为60的BCD计数器的VHDL设计代码如下: (1)模为60的BCD计数器 en:计数使能 clear:异步清零 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter_60 is port( en:in std_logic; clear:in std_logic; clk:in std_logic; count:out std_logic; qh:buffer std_logic_vector(3 downto 0); ql:buffer std_logic_vector(3 downto 0); end; architecture str of counter_60 is Begin count=1 when (qh=“0101“ and ql=“1001“ and en=1) else 0; process(clk,clear) begin If (clear=0) then qh=“0000“; ql=“0000“; elsif (clkevent and clk=1) then if(en=1)then if(ql=9)then ql=“0000“; if(qh=5)then qh=“0000“; ql=“0000”; else qh=qh+1; end if; else ql=ql+1; end if; end if; end if; end process; end; (2)模为12的计数器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter_12 is port( en:in std_logic; clear:in std_logic; clk:in std_logic; count:out std_logic; qh:buffer std_logic_vector(3 downto 0); ql:buffer std_logic_vector(3 downto 0); end; architecture str of counter_12 is begin count=1 when(qh=“0001“ and ql=“0010“ and en=1) else 0; process(clk,clear) begin if(clear=0)then qh=“0000“; ql=“0000“; elsif(clkevent and clk=1) then if(en=1)then if(ql=9) then ql=“0000“; qh=“0001”; else ql=ql+1; end if; if(qh=1)then if(ql=2)then qh=“0000“; ql=“0000“; else ql=ql+1; end if; end if; end if; end if; end process; end; (3)顶层原理图设计 4.编译和仿真 编译工程文件,建立仿真波形文件后完成仿真 思考 如何用8段LED数码管显示? 8.2 自顶向下混合设计 8.2.1 自顶向下设计流程 所谓自顶向下的设计方法,是 指设计电子系统先从系统最抽象的层 次出发,作高层次仿真,经过仿真验 证后再经整体规划(Floor Planning) 将系统行为操作分为多个子系统。 显示译 码器 16进制 减法计 数器 FPGA 8.2.2 16进制计数译码显示电路设计 1.建立工程 建立名为counter_16的工程文件 2.建立原理图文件 建立一个空白的原理图文件,并命名为counter_16 3.创建图标模块 单击(Block Tool)按钮,在适当的位置放置一个符号块。 4. 设置图标模块 (1) 在符号块上单击鼠标右键:从弹出的 菜单中选择“Block Properties”命令。 “I/O”页标签:在“Name”栏中分别输入图标模块的输 入端口名和输出端口名;在“type栏中分别选择与输 入和输出对应的类型,点击ADD按钮。当设置完成所 有端口后,单击“确定”按钮。 “General”页面: “Name”栏中输入设计文件名称, 在“Instance name”栏中输入模块名称。本例中设计名 称为“counter16”,模块名称为“instl”。 5.添加模块引线并设置属性 (1)在图中的count16模块的左右两侧 分别用3条连线和1条总线连接。在每条 线靠模块的一侧都有图样。双击其中一 个样标,弹出“Mapper Properties”对 话框。在“General”页面的“Type”栏中 选择输入、输出类型,本例中选择为 “INPUT”。 (2)单击“Mappings”页标签。在“I/O on block”栏里选择引脚clk,在“Signals in node”栏中输入连线节点名称clk。输入完成 后,单击“Add”按钮添加到“Existing mappings”栏中。最后单击“确定”按钮。 (3) 同理,将其他引线按此方法进行设置。通常模 块左侧放置输入接口信号,右侧放置输出接口信 号。本例将左侧的其余两条输入信号分别设置为 ,rst和en;右侧的输出信号设置为q30 。 6.创建设计文件 在符号块上单击鼠标右键,在弹出的菜单中选择 “Create Design File form Selected Block”命令 。 其中“File type”栏中有4个选项可供选择,它们是 “AHDL”、“VHDL”、“Verilog HDL”和“Schematic” ,分别对应不同的电路行为描述方法。本例中选择 “VHDL”,单击“OK按钮。此时,会弹出生成模块文 件的确认对话框,单击“确定”,进入VHDL文本编辑 窗口。 7. 输入VHDL代码 将代码修改为所需要设计的代码。 Counter16.vhd文件的VHDL描述 LIBRARY ieee; USE ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY counter16 IS PORT( clk : IN STD_LOGIC; en : IN STD_LOGIC; rst : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(3 downto 0) ); END counter16; ARCHITECTURE counter16_architecture OF counter16 IS signal q1:std_logic_vector(3 downto 0); BEGIN process(clk,en,rst) begin if en=1 then if rst=1 then q1=“0000“; elsif clkevent and clk=1 then q1=q1+1; end if; end if; end process; q=q1; END counter16_architecture; 8. 添加译码器模块,并完成顶层电路的设计 按照上述方法添加译码器模块和所用引脚。 译码显示器设计图 数码显示 bcd_decoder模块创建的VHDL代码 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY bcd_decode IS PORT( i : IN STD_LOGIC_VECTOR(3 downto 0); DIG :OUT BIT; -增加一个输出引脚,选通LED位 y : OUT STD_LOGIC_VECTOR(6 downto 0) ); END bcd_decode; ARCHITECTURE bcd_decode_architecture OF bcd_decode IS BEGIN DIG y y y y y y y y y y y y yyyyy=“1111111“; end case; end process; END ARCHITECTURE; 9.完成顶层电路设计 1)连接两个模块 2) 添加输入输出端口 10.编译工程 单击水平工具条上的编译按钮,将所设计的工程 项目counter_16进行编译。 11. 仿真 创建波形矢量文件后进行功能仿真。 输入波形如何设置? 12. 引脚分配、下载验证 分配引脚: clk:接时钟输入引脚clock0 用短路块设置成1HZ N2 CLOCK 0 时时 钟钟 输输入 A13 CLOCK 1 N26 CLOCK 2 AE1 4 CLOCK 3 数码显示引脚 J8SEG0 (a)-y0 动态动态 数码码管 M3SEG1 (b)-y1 K6SEG2 (c)-y2 J6SEG3 (d)-y3 U10SEG4 (e)-y4 N9SEG5 (f)-y5 L10SEG6 (g)-y6 L9SEG7 (hp) L6DIG0 (B0)-dig K5DIG1 G3DIG2 G4DIG3 J3DIG4 K4DIG5 L3DIG6 M4DIG7 (B7) 段 线 位 线
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号