Someshy 发表于 2013-8-29 13:15:37

VHDL简单程序 求帮忙看看 顺便谁知道用WAIT怎么实现1S的延...

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity led_four is
port(clk:in bit;
led:out std_logic_vector(7 downto 0));
end led_four;
architecture behave of led_four is
begin
process(clk)
variable temp1: integer range 0 to 9;
begin
if(clk'event and clk='1')then
temp1:=temp1+1;
if(temp1=9) then
temp1:=0;
end if;
end if;
case temp1 is
when 0=>led<="11111111";
when 1=>led<="11111110";
when 2=>led<="11111101";
when 3=>led<="11111011";
when 4=>led<="11110111";
when 5=>led<="11101111";
when 6=>led<="11011111";
when 7=>led<="10111111";
when 8=>led<="01111111";
when others=>null;
end case;
end process;
end behave;
程序就是这样的 ,稍到开发板上等八个流水灯都是微亮,程序写的是流水灯就是一次亮的,求帮忙看看哪里有错误,感激不尽,顺便谁知道用WAIT怎么实现1S的延迟啊

流氓马 发表于 2013-8-29 13:23:48

你的clk是多大频率的啊?如果频率很高的话,先把时钟分频到1HZ,然后再用来当流水灯的时钟。
另外,你所谓的微亮有点不可思议,因为即便你的频率很高,LED输出的占空比也有8/9,跟全亮的效果应该差不多的
wait我没有用过,我一般都是通过计数器来延时的

Someshy 发表于 2013-8-29 13:28:07

流氓马 发表于 2013-8-29 13:23 static/image/common/back.gif
你的clk是多大频率的啊?如果频率很高的话,先把时钟分频到1HZ,然后再用来当流水灯的时钟。
另外,你所谓 ...

能不能加个QQ我QQ 380128581不懂得可以请教谢谢啦

lans0625 发表于 2013-8-29 13:30:26

WAIT是仿真用的吧?

流氓马 发表于 2013-8-29 13:35:36

Someshy 发表于 2013-8-29 13:28 static/image/common/back.gif
能不能加个QQ我QQ 380128581不懂得可以请教谢谢啦

公司不让上qq,有问题在这里问吧,这样也可以方便后来的人。

Someshy 发表于 2013-8-29 13:45:54

流氓马 发表于 2013-8-29 13:35 static/image/common/back.gif
公司不让上qq,有问题在这里问吧,这样也可以方便后来的人。

好的原来是已经工作了的大哥,你好还有一点疑问就是怎么修改时钟脉冲周期啊   我用的是QUATUSⅡ   这点还求解答

Someshy 发表于 2013-8-29 13:46:47

lans0625 发表于 2013-8-29 13:30 static/image/common/back.gif
WAIT是仿真用的吧?

昂。。。我用的开发板   

marx 发表于 2013-8-29 13:52:24

这种2逼错误我也犯过,wait 2ns结果毛用都没有,老老实实写个分频器把gclk给分到1s吧。

Someshy 发表于 2013-8-29 13:57:46

marx 发表于 2013-8-29 13:52 static/image/common/back.gif
这种2逼错误我也犯过,wait 2ns结果毛用都没有,老老实实写个分频器把gclk给分到1s吧。 ...

大哥。。。知音啊!时钟周期不能设置吗我用的QUATUS II最好能加下QQ 380128581

流氓马 发表于 2013-8-29 14:01:44

module clk_gen (clock,clk_1us);               
input clock;//晶振时钟50M
output clk_1us;
reg clk_1us;
reg count;

always @( posedge clock)
begin
    if(count>=49)
        begin
                  count<=0;
        end
    else
        begin
                count<=count+1;
                if(count<=24)
                        begin
                                clk_1us<=1;
                        end
                else
                        begin
                                clk_1us<=0;
                        end
        end
end
endmodule你可以根据这个改一下,这个是50MHZ晶振,输出1MHZ脉冲的程序.
你要是想输出1HZ,改几个数字就ok了

Someshy 发表于 2013-8-29 14:04:45

流氓马 发表于 2013-8-29 14:01 static/image/common/back.gif
你可以根据这个改一下,这个是50MHZ晶振,输出1MHZ脉冲的程序.
你要是想输出1HZ,改几个数字就ok了 ...

大哥哥。。我用的是VHDL 亲    像这种修改时钟周期不能从软件上改吗只有编程吗?   

流氓马 发表于 2013-8-29 14:22:15

Someshy 发表于 2013-8-29 14:04 static/image/common/back.gif
大哥哥。。我用的是VHDL 亲    像这种修改时钟周期不能从软件上改吗只有编程吗?    ...

兄弟,一样的原理,我这个代码很容易懂的吧~

Someshy 发表于 2013-8-29 16:14:40

流氓马 发表于 2013-8-29 14:22 static/image/common/back.gif
兄弟,一样的原理,我这个代码很容易懂的吧~

已经改好了谢谢了!!!
页: [1]
查看完整版本: VHDL简单程序 求帮忙看看 顺便谁知道用WAIT怎么实现1S的延...