VHDL 30进制减计数器编写 不知道对不对 望帮帮忙 谢谢

shadowdudu 2008-05-07 07:02:04
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity d is
port(clk: in bit;
oc: out bit;
y: out integer range 0 to 29);
end d;
architecture dh of d is
signal q: integer range 0 to 29;
begin
pl: process (clk)
begin
if(clk'event and clk='1') then
if q=29 then
q<=q-1;
elsif
q=0 then
q<=29;
end if;
end if;
if q<15 then
oc<='0';
else
oc<='1';
end if;
y<=q;
end process;
end;

大家看看 对不对 还有我希望在这个计数器上添加 暂停和连续 以及清零的工作 也是有VHDL 该怎么写 谢谢
...全文
1002 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sssbang 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 linlinste 的回复:]
如果在这个程序的基础上想要添加手动控制减计数的时间,通过一个键可以进行加减数应该怎么改呢?真诚请教各位牛人。
[/Quote]
--------
不难,增加一个相同的计数器对输入脉冲进行计数。原来的计数器每次溢出都载入这个数值就可以了。
canlanyangguang 2008-11-16
  • 打赏
  • 举报
回复
能告诉我vhdl怎么实现ADS8402芯片的控制时序和实现数据采集吗??
Claude 2008-11-11
  • 打赏
  • 举报
回复
我问一下哈,学VHDL是不是很有前途啊?因为我学过那么一点,在不久前这些问题是可以解答出来的,可是现在……:-)
linlinste 2008-10-22
  • 打赏
  • 举报
回复
如果在这个程序的基础上想要添加手动控制减计数的时间,通过一个键可以进行加减数应该怎么改呢?真诚请教各位牛人。
shadowdudu 2008-05-09
  • 打赏
  • 举报
回复
谢谢大家  我在研究下
aaronstone 2008-05-08
  • 打赏
  • 举报
回复
>大家看看 对不对
依我看,你这个算法不对

我觉得这样的算法比较好

if (RST = '1') then
q <= 29;

elsif (clk'event and clk = '1') then
if ((q >= 0) and (q <= 29)) then
q <= q - 1;
else
q <= 29;
end if;
end if;

>还有我希望在这个计数器上添加 暂停和连续 以及清零的工作 也是有VHDL
这些功能加上判断就可以了
aaronstone 2008-05-08
  • 打赏
  • 举报
回复
space 缩进哈
aaronstone 2008-05-08
  • 打赏
  • 举报
回复
避免在程序中使用teb缩进
用孔个最好
kool86 2008-05-08
  • 打赏
  • 举报
回复
怎么回事,我一回帖又变成这个样子了,呵呵,有问题
kool86 2008-05-08
  • 打赏
  • 举报
回复
这个多多有问题,我看得好头痛啊,格式杂乱无章,最好养成一个良好的编程习惯,试一下我下面这个
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity d is
port
(
clk:in bit;--时钟
oc:out bit;--15?
rst:in bit;--复位
hold:in bit;--暂停与继续
y:out integer range 0 to 29--计数器输出
);
end d;
architecture dh of d is
signal q:integer range 0 to 29;
signal c:bit;
begin
process (clk,rst)
begin
if rst = '1' then--异步复位
q <= 29;
c <= '1';
elsif clk'event and clk = '1' then--上升沿触发
if hold = '0' then--暂停计数
q <= q;
else--继续计数
q <= q - 1;
end if;
if q < 15 then--15?
c <= '0';
else c <= '1';
end if;
if q = 0 then--重新赋值
q <= 29;
end if;
end if;
end process;
y <= q;
oc <= c;
end;

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧