打印

请教一个计数器的问题

[复制链接]
2410|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hiker000|  楼主 | 2011-3-1 14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想写一个计数器。除了时钟(clk)+1以外再加上一个键(cin),每按一次键计数器也能够+1。
最初这样写的:
elsif ((clk'event and clk='1')or cin='1') then
a<=a+1;结果不行。
后来把cin放到前面:
if cin='1' then a<a+1;
elsif (clk'event and clk='1') then a<=a+1;
这样更过不了。
请教各位,程序应该如何写法,小弟不胜感激。

相关帖子

沙发
ttkz| | 2011-3-1 22:31 | 只看该作者
看来lz需要有一点硬件思想。
if cin='1' then a<a+1;
硬件会是什么样子呢?根本实现不了。
如果要对cin计数,就需要明确在cin出现哪种状态时计数。
比如,可以要求在每次cin下降沿或上升沿计数。

使用特权

评论回复
板凳
armsnow| | 2011-3-2 08:54 | 只看该作者
你的功能还是没有说清楚,如果clk和cin同时有效时,你的读数器怎么变化啊,

使用特权

评论回复
地板
conconfidence| | 2011-3-6 13:22 | 只看该作者
VHDL,我用的是VERILOG

使用特权

评论回复
5
charrijon| | 2011-3-6 14:05 | 只看该作者
楼主还缺少对FPGA的理解

使用特权

评论回复
6
十字星1986| | 2011-4-1 14:45 | 只看该作者
可以这样写 你参考下:
always@(posedge clk)
begin
if(cin)
a<=a+2;
elsea<=a+1;
end
当然  cin这个按键  你要进行消抖  或者采边沿

使用特权

评论回复
7
gavin_m| | 2011-4-3 15:31 | 只看该作者
本帖最后由 gavin_m 于 2011-4-3 15:37 编辑

2楼的兄弟,不是你那样说的吧!?VHDL里面可以那样写。并且,你说的那样同时进行边沿检测的话,肯定会出错。不信你试试。楼主的问题,你可以这样啊,没按键的时候,你计数加一,有按键的时候,你计数加二;
if clk'rising_edge then
    if cin='1' then
        a<=a+2;
    else
        a<=a+1;
    end if;
end if;
个人拙见。希望能抛砖引玉了。

使用特权

评论回复
8
donver123| | 2011-4-4 22:17 | 只看该作者
用vhdl语法忘了,用verilog描述了,总的思路是把clk和cin相或然后接到D触发器的clk端,只要有一个信号上升沿跳变,输出就加1,大家看看这样行不行。
always@(posedge clk1)
begin
     a = a+1
end
assign clk1 = clk|cin;

使用特权

评论回复
9
utopiaworld| | 2011-4-5 20:34 | 只看该作者
vhdl 也不太懂
我用verilog帮你看一下
感觉lz 可能描述的有点问题 cin 这个信号应该是一个异步信号,才可以这样子写

使用特权

评论回复
10
fpga_play| | 2011-5-14 12:18 | 只看该作者
7# gavin_m
cin能直接用吗?这样的话clk过快和过慢都有buge吧?请指教。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

19

帖子

0

粉丝