返回信息流结果错得很没道理,可是检查不出到底哪里错了…………求大牛解答
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity jishu is
port(clke:in std_logic;
jishu_clk:in std_logic;
cout:out std_logic_vector(26 downto 0)
);
end jishu;
architecture ji of jishu is
signal c5,c4,c3,c2,c1,c0:std_logic_vector(3 downto 0);
signal h:std_logic_vector(6 downto 0);
begin
process1:process(clke)
begin
if(clke'event and clke='1') then
cout<="011111100000000000000000000";
c5<="0000";c4<="0000";c3<="0000";c2<="0000";c1<="0000";c0<="0000";h<="0111111";
else
cout<=h&c4&c3&c2&c1&c0;
end if;
end process;
process2:process(jishu_clk)
begin
if(jishu_clk'event and jishu_clk='1') then
if(clke='1') then
if(c0<"1001") then
c0<=c0+1;
else
c0<="0000";
if(c1<"1001") then
c1<=c1+1;
else
c1<="0000";
if(c2<"1001") then
c2<=c2+1;
else
c2<="0000";
if(c3<"1001") then
c3<=c3+1;
else
c3<="0000";
if(c4<"1001") then
c4<=c4+1;
else
c4<="0000";
if(c5<"1001") then
c5<=c5+1;
else
c5<="0000";
end if;
end if;
end if;
end if;
end if;
end if;
case c5 is
when "0000"=>h<="0111111";
when "0001"=>h<="0000110";
when "0010"=>h<="1011011";
when "0011"=>h<="1001111";
when "0100"=>h<="1100110";
when "0101"=>h<="1101101";
when "0110"=>h<="1111101";
when "0111"=>h<="0000111";
when "1000"=>h<="1111111";
when "1001"=>h<="1101111";
when others=>h<="0111111";
end case;
end if;
end if;
end process;
end ji;
这是一条镜像帖。来源:北邮人论坛 / circuit / #14404同步于 2010/7/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
求助,为什么这段VHDL程序出不了正确的结果……
zxc12345
2010/7/15镜像同步24 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
就是一个频率计数器,之前已经分频了,一秒计数,一秒显示。
【 在 chrischen25 的大作中提到: 】
: 看着有点复杂,你先说说功能吧,感觉计数器需要这么复杂吗?
if(clke'event and clke='1') then
cout<="011111100000000000000000000";
c5<="0000";c4<="0000";c3<="0000";c2<="0000";c1<="0000";c0<="0000";h<="0111111";
else
cout<=h&c4&c3&c2&c1&c0;
end if;
没有仔细看你的程序,但是个人觉得这里的 if else 有点问题,同时使用一个时钟的上下沿MS是不行的,否则倍频程序就太容易
可是我想的是在时钟上升沿那个瞬间清零,然后在为'1’的时候计数,如果照你的改,就计不了数了啊…………
【 在 chrischen25 的大作中提到: 】
: if(clke='1')then
: else
: 不妨这样试试,我不知道对不对啊,呵呵
【 在 zxc12345 的大作中提到: 】
: 可是我想的是在时钟上升沿那个瞬间清零,然后在为'1’的时候计数,如果照你的改,就计不了数了啊…………
: 【 在 chrischen25 的大作中提到: 】
: : if(clke='1')then
: ...................
哦,我没去仔细读你的程序,后面一个process比较明显,就是个进位计数器,而这个process,你用了上升沿和下降沿,这个估计是造成你错误的原因,或许你解释一下为什么想上下沿都用,我可以帮你想想办法,呵呵
就是在上升沿的时候清零,然后在‘1’的时候计数,‘0’的时候显示
【 在 chrischen25 的大作中提到: 】
: 哦,我没去仔细读你的程序,后面一个process比较明显,就是个进位计数器,而这个process,你用了上升沿和下降沿,这个估计是造成你错误的原因,或许你解释一下为什么想上下沿都用,我可以帮你想想办法,呵呵
【 在 zxc12345 的大作中提到: 】
: 就是在上升沿的时候清零,然后在‘1’的时候计数,‘0’的时候显示
: 【 在 chrischen25 的大作中提到: 】
: : 哦,我没去仔细读你的程序,后面一个process比较明显,就是个进位计数器,而这个process,你用了上升沿和下降沿,这个估计是造成你错误的原因,或许你解释一下为什么想上下沿都用,我可以帮你想想办法,呵呵
: ...................
那现在你的程序是在上升沿清零,下降沿cout赋值(不知道这是不是你说的显示),在clke=‘1’的时候计数,而且这个计数要依赖于jishu_clk,还必须是在这个时钟的上升沿,同时clke=‘1’的时候才能计数,是这样吧?
恩~O(∩_∩)O~
【 在 chrischen25 的大作中提到: 】
: 那现在你的程序是在上升沿清零,下降沿cout赋值(不知道这是不是你说的显示),在clke=‘1’的时候计数,而且这个计数要依赖于jishu_clk,还必须是在这个时钟的上升沿,同时clke=‘1’的时候才能计数,是这样吧?