woshiyean 发表于 2010-5-26 21:14:24

关于VHDL语言中的赋值的问题!

p6: process(clk,speed)
begin
if (clk'event and clk='1') then
    if speed ='1' then
        clk1<=not clk1;       
    else
      clk1<=clk;
   end if;
end if;
end process;
这是我的一个进程,意思是一个拨动开关“speed”拨到有效(1)时,对clk信号二分频给clk,如果是0的话,就直接把clk信号赋值给clk1。
剩下的进程都是以clk1的上升沿为条件发生的。
现在的问题是,我在试验中看到了clk二分频后的实验结果,然后另一种情况就是没有任何现象,对于clk信号直接赋值给clk1的语句,理论上是没错的。仿真显示
“speed=‘0’”时,clk1没有方波信号!
原VHD程序ourdev_557241.txt(文件大小:7K) (原文件名:caideng.txt)
这难道就是信号的赋值语句在进程结束后才赋值的原因?
期待高手的解答!!!

NJ8888 发表于 2010-5-26 21:23:05

如果speed是0的话,就直接把clk信号赋值给clk1--------因为你事件clk'event and clk='1'才处理clk1输出,此时clk=1,显然输出一直为1。

woshiyean 发表于 2010-5-26 22:21:24

谢谢楼上的回复!!!
那对于我的程序而言,怎样实现clk1<=clk信号的赋值呢?
可能这个问题有点不可理喻,呵呵~~

woshiyean 发表于 2010-5-26 22:25:03

看这样行不行:在clk的上升沿和下降沿,把clk1<=clk。

NJ8888 发表于 2010-5-26 22:25:25

回复【2楼】woshiyean
谢谢楼上的回复!!!
那对于我的程序而言,怎样实现clk1&lt;=clk信号的赋值呢?
可能这个问题有点不可理喻,呵呵~~
-----------------------------------------------------------------------

不想麻烦就这样:分两部分,一个是2分频,一个是数据选择器。当然也能写到一个进程

qinxg 发表于 2010-5-27 09:04:36

p6: process(clk,speed)
begin
if( speed ='0' ) then
    clk1 <= clk;
elsif (clk'event and clk='1') then
    clk1 <= not clk1;
end if;
end process;

woshiyean 发表于 2010-5-27 21:31:12

回复【5楼】qinxg
-----------------------------------------------------------------------

这样是最佳的答案了呵!

NJ8888 发表于 2010-5-27 21:57:33

回复【6楼】woshiyean
回复【5楼】qinxg   
-----------------------------------------------------------------------
这样是最佳的答案了呵!
-----------------------------------------------------------------------

你那时钟用在有的场合要注意,因为相对输入时钟两种输出时钟有不一致的延迟。最好还是根据SEPPD,使用一个速度比你目前高一倍的时钟(一个节拍或两个节拍)来做动作

woshiyean 发表于 2010-5-28 20:14:40

回复【7楼】888888888888
-----------------------------------------------------------------------

我现在的设计要求还没有那么严格的时序,不过,谢谢888888888888 的提醒,我会作为把一个问题考虑周密的习惯听取你的意见的!谢谢,呵呵~~~
页: [1]
查看完整版本: 关于VHDL语言中的赋值的问题!