VHDL菜鸟问遇到一个问题啦,求解啊。。。。

SLZ2011 2013-12-02 06:11:54
是一个很简单的实验(数字电子钟),但是因为不熟悉VHDL所以找不出问题在哪里。
下载到板子上运行,复位没有任何效果。。。这是为什么。
功能仿真正确。。。时序仿真问题非常严重。。。
程序主要部分如下。
process(clkDiv1s,rst)
variable hourHight_r : integer range 0 to 15;
variable hourLow_r : integer range 0 to 15;
variable minHight_r : integer range 0 to 15;
variable minLow_r : integer range 0 to 15;
variable secHight_r : integer range 0 to 15;
variable secLow_r : integer range 0 to 15;
begin
if rst='0' then
hourHight_r:=2;
hourLow_r:=3;
minHight_r:=5;
minLow_r:=9;
secHight_r:=5;
secLow_r:=6;
else
if clkDiv1s'event and clkDiv1s='0' then
secLow_r:=secLow_r+1;
if secLow_r>=10 then
secLow_r:=0;
secHight_r:=secHight_r+1;
if secHight_r>=6 then
secHight_r:=0;
minLow_r:=minLow_r+1;
if minLow_r >=10 then
minLow_r:=0;
minHight_r:=minHight_r+1;
if minHight_r>=6 then
minHight_r:=0;
hourLow_r:=hourLow_r+1;
if (not (hourHight_r>1 and hourLow_r>3)) and hourLow_r>=9 then
hourLow_r:=0;
hourHight_r:=hourHight_r+1;
elsif (hourHight_r>1 and hourLow_r>3) then
hourHight_r:=0;
hourLow_r:=0;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
hourHight<=hourHight_r;
hourLow<=hourLow_r;
minHight<=minHight_r;
minLow<=minLow_r;
secHight<=secHight_r;
secLow<=secLow_r;
end process;
...全文
936 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cauc_guidian 2014-05-11
  • 打赏
  • 举报
回复
if clkDiv1s'event and clkDiv1s='0' then这句应该有问题啊,改成上升沿吧,if clkDiv1s'event and clkDiv1s='1' then,你试试看
Falcon7x 2013-12-28
  • 打赏
  • 举报
回复
process 中把 else if clkDiv1s'event and clkDiv1s='0' then 改成 elsif clkDiv1s'event and clkDiv1s='0' then 就变成标准RTL寄存器传输语言了。 把variable改成singal,再把 := 改成 <= 就可以了。
  • 打赏
  • 举报
回复
vhdl变量 (variable声明的)有作用域. scope在这个process里面
falloutmx 2013-12-02
  • 打赏
  • 举报
回复
把variable改成singal,用时钟上升沿,使用非阻塞赋值,不要在一个process中使用太多的if else

6,127

社区成员

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

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