FPGA_VHDL_VIVADO原理图+仿真

本文介绍了使用VIVADO进行原理图设计的过程,包括创建工程、源文件、器件连接、块设计、以及如何编写激励文件tb进行vhdl仿真,涉及步骤详细且附有相关链接资源。

一、VIVADO原理图设计——学习可结合该博客——http://t.csdnimg.cn/ZGZHR

STEP ONE——创建工程

STEP TWO——创建源文件

有几种器件 create多少个design文件——entity接口+architecture行为描述——原理图器件端口+功能

综合设计——验证语法有无错误,没报错就可以下一步了

STEP TWO_IP——创建块设计——命名和工程名一致

原理图描述——右键源文件 add to module。。。。(添加器件)+原理图连线即可(器件连接关系)

原理图画布工具的一些小技巧——layout布局优化 + route连线优化 + 验证功能

右键块设计——先点击选项“输出头部文件”——后点击选项“生成头部文件” = 操作步骤

(有什么器件+连线关系)——(完成块设计功能描述的代码的实现=用vhdl代码完成各个器件的连接)——(将块设计的封装为一个元件 = 代码中只留出了输入输出引脚)= 代码变化

(各个只有接口的器件design文件—add module to—》块设计_i.vhdl)——(块设计的连接关系——》.vhdl)——(.vhdl—封装—》块设计_wrapper.vhdl)= 文件层次的变化

二、写激励文件tb——实例化——仿真

激励文件初识可以看看以下博文——http://t.csdnimg.cn/MspQo

 vhdl仿真激励文件 不需要时钟信号时 可采用wait for 10ms——代码参考这篇博客——http://t.csdnimg.cn/II8Gt

激励文件结构——学习参考下面这篇博文——http://t.csdnimg.cn/pTvsa

STEP ONE——创建仿真文件——工程名_tb.vhdl

entity不写is——end entity;

architecture behavior of entity is——

        component部件 必须是设计里的器件(wrapper) (部件端口名;2;3);

        signal信号声明——(激励信号名——仿真图左侧信号名字/外部信号名字;2;3);

begin——

dut(被测试元件):component port map器件例化——(端口=>信号,2,3);

process_1()——用于产生时钟信号的部分进程——end process;

process_2()——用于产生激励信号的部分进程——end process;

end behavior;

### VivadoVHDL 实现按键消抖仿真的方法 在 Vivado 中对 VHDL 编写的按键消抖模块进行仿真是一项常见的需求。以下是关于如何实现这一目标的具体说明以及示例代码。 #### 1. 按键消抖原理 按键消抖的主要目的是消除机械开关因弹跳引起的不稳定状态。通常采用软件延时或硬件滤波的方式解决此问题。对于 FPGA 设计,推荐使用基于定时器的硬件消抖方案[^1]。 #### 2. 示例代码:按键消抖模块 (VHDL) 以下是一个简单的按键消抖模块设计: ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity debounce is Port ( clk : in std_logic; -- 系统时钟 btn_in : in std_logic; -- 原始按键输入 btn_out : out std_logic -- 消抖后的按键输出 ); end debounce; architecture Behavioral of debounce is signal counter : integer range 0 to 99999 := 0; -- 计数器用于延迟 signal temp_btn_state : std_logic := '0'; -- 当前按钮状态缓存 begin process(clk) begin if rising_edge(clk) then if btn_in /= temp_btn_state then counter <= 0; -- 如果检测到变化,则重置计数器 elsif counter < 99999 then counter <= counter + 1; -- 否则继续计数 end if; if counter = 99999 then temp_btn_state <= btn_in; -- 更新当前按钮状态 btn_out <= temp_btn_state; -- 输出稳定的状态 end if; end if; end process; end Behavioral; ``` 这段代码实现了基本的按键消抖功能,其中 `counter` 的范围可以根据实际系统的时钟频率调整以适应不同的消抖时间。 #### 3. 测试平台 (Testbench) 示例 为了验证上述模块的功能,在 Vivado 中创建测试平台如下所示: ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity tb_debounce is -- Testbench entity does not have ports. end tb_debounce; architecture Behavioral of tb_debounce is constant CLK_PERIOD : time := 10 ns; -- 定义系统时钟周期 signal sim_clk : std_logic := '0'; signal sim_btn_in : std_logic := '0'; signal sim_btn_out : std_logic; component debounce is port( clk : in std_logic; btn_in : in std_logic; btn_out : out std_logic ); end component; begin -- 被测实体实例化 uut: debounce port map ( clk => sim_clk, btn_in => sim_btn_in, btn_out => sim_btn_out ); -- 时钟进程定义 clock_process: process begin sim_clk <= not sim_clk; wait for CLK_PERIOD / 2; end process; -- 刺激过程 stim_proc: process begin -- 初始化 wait for 100 ns; sim_btn_in <= '1'; -- 设置初始按键状态为高电平 -- 模拟按键按下事件 wait for 500 ns; sim_btn_in <= '0'; -- 按下按键 -- 模拟按键释放事件 wait for 800 ns; sim_btn_in <= '1'; -- 松开按键 wait; end process; end Behavioral; ``` 这个测试平台会生成一个稳定的时钟信号并模拟按键按下的动作序列来观察消抖效果。 #### 4. 在 Vivado 中运行仿真 完成以上两部分后,按照以下步骤操作即可启动仿真: - 将主模块 (`debounce`) 和测试平台 (`tb_debounce`) 添加至项目; - 配置好仿真环境参数(如设置运行时间为适当长度); - 执行行为级仿真查看波形是否符合预期。 通过这些步骤能够有效检验按键消抖逻辑的工作情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值