发 帖  
原厂入驻New
[问答]

怎么实现二进制计数器?

294 xilinx 计数器
分享
大家好,
由于我是初学者,我尽可能多地尝试,看看我是否能够克服编程FPGA的学习曲线。
这次我用VHDL实现了一个二进制计数器
图书馆IEEE;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.STD_LOGIC_UNSIGNED.ALL;
实体主要是
港口 (
clk,reset:in std_logic;
LED0,Led1,Led2,Led3,Led4,Led5,Led6,Led7:out std_logic
);
结束主;
建筑行为主要是
类型状态是(
明确,
计数
显示
);
signal pr_state,nx_state:state;
信号clock_Counter:整数;
signal display_Counter:std_logic_vector(7 downto 0);
开始
- 注册
进程(clk,重置)
开始
IF(reset ='1')然后
pr_state
Clock_Counter'0');
nx_state
Clock_Counter
nx_state。
锁存器可以从不完整的case或if语句生成。
我们不建议在FPGA / CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告:Xst:737 - 找到信号的8位锁存器。
锁存器可以从不完整的case或if语句生成。
我们不建议在FPGA / CPLD设计中使用锁存器,因为它们可能会导致时序问题。
我的问题是:
1)为什么“Clock_Counter”和“Display_Counter”被识别为锁存器?
2)为什么我们可以实现触发器D边沿触发而不是电平敏感?
3)有人可以修改我的代码以正常工作吗?
提前致谢
夏甲
0
2020-3-13 09:16:40   评论 分享淘帖 邀请回答

相关问题

5个回答
嗨,
您编写的计数器基于pr_state的级别触发。
要推断触发器,您需要在时钟的上升沿写入它们。
库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Main是Port(clk,reset:在std_logic中; Led0,Led1,Led2,Led3,Led4,Led5,Led6,Led7:out std_logic); end Main;
建筑行为主要是
类型状态是(清除,计数,显示);
signal pr_state,nx_state:state;
信号Clock_Counter:整数;
signal Display_Counter:std_logic_vector(7 downto 0);
开始 
- 寄存器进程(clk,reset)如果(reset ='1')则开始,然后pr_state Clock_Counter Display_Counter'0');
nx_state Clock_Counter if(Clock_Counter = 50000000)then - Spartan 3E的时钟为50 MHz Display_Counter nx_state else nx_state end if;
当Display => nx_state结束时;
万一;
结束过程;

Led0 Led1 Led2 Led3 Led4 Led5 Led6 Led7
2020-3-13 09:31:05 评论

举报

嗨,
您编写的计数器基于pr_state的级别触发。
要推断触发器,您需要在时钟的上升沿写入它们。
库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Main是Port(clk,reset:在std_logic中; Led0,Led1,Led2,Led3,Led4,Led5,Led6,Led7:out std_logic); end Main;
建筑行为主要是
类型状态是(清除,计数,显示);
signal pr_state,nx_state:state;
信号Clock_Counter:整数;
signal Display_Counter:std_logic_vector(7 downto 0);
开始 
- 寄存器进程(clk,reset)如果(reset ='1')则开始,然后pr_state Clock_Counter Display_Counter'0');
nx_state Clock_Counter if(Clock_Counter = 50000000)then - Spartan 3E的时钟为50 MHz Display_Counter nx_state else nx_state end if;
当Display => nx_state结束时;
万一;
结束过程;

Led0 Led1 Led2 Led3 Led4 Led5 Led6 Led7
2020-3-13 09:38:02 评论

举报

> 1)为什么“Clock_Counter”和“Display_Counter”被识别为锁存器?
因为那就是你写的。
这是使用两个进程状态机时的典型故障。
在第二个过程中你写了“Display_Counter 3”有人可以修改我的代码才能正常工作吗?
如果您完成修改会更好。
删除第二个进程并将其作为单个进程写入。
------您是否尝试在Google中输入问题?
如果没有,你应该在发布之前。太多结果?
尝试添加网站:www.xilinx.com
2020-3-13 09:56:11 评论

举报

嗨,
rising_edge(clk)和falling_edge(clk)中的目标合成触发器以获取更多信息,检查以下链接。
http://www.cs.sfu.ca/~ggbaker/reference/std_logic/1164/rising_edge.html
正如我在您的编码风格中看到的那样,您没有在rising_edge(clk_name)或falling_edge(clk_name)中使用Clock_Counter和Display_Counter,这是工具无法为您的目标生成触发器的原因。
谢谢,
Anusheel
--------------------------------------------------
--------------------------------------------请注意 - 请注明
如果提供的信息有用,请回答“接受为解决方案”。给予您认为有用并回复导向的帖子。感谢K--
--------------------------------------------------
---------------------
2020-3-13 10:04:29 评论

举报

嗨,
您可以从本用户指南中找到FSM编码技术,(在FSM HDL编码技术下,页码:199)
http://www.xilinx.com/support/documentation/sw_manuals/xilinx14_7/xst.pdf
2020-3-13 10:23:27 评论

举报

只有小组成员才能发言,加入小组>>

157个成员聚集在这个小组

加入小组

创建小组步骤

快速回复 返回顶部 返回列表