关于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)
这难道就是信号的赋值语句在进程结束后才赋值的原因?
期待高手的解答!!! 如果speed是0的话,就直接把clk信号赋值给clk1--------因为你事件clk'event and clk='1'才处理clk1输出,此时clk=1,显然输出一直为1。 谢谢楼上的回复!!!
那对于我的程序而言,怎样实现clk1<=clk信号的赋值呢?
可能这个问题有点不可理喻,呵呵~~ 看这样行不行:在clk的上升沿和下降沿,把clk1<=clk。 回复【2楼】woshiyean
谢谢楼上的回复!!!
那对于我的程序而言,怎样实现clk1<=clk信号的赋值呢?
可能这个问题有点不可理喻,呵呵~~
-----------------------------------------------------------------------
不想麻烦就这样:分两部分,一个是2分频,一个是数据选择器。当然也能写到一个进程 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; 回复【5楼】qinxg
-----------------------------------------------------------------------
这样是最佳的答案了呵! 回复【6楼】woshiyean
回复【5楼】qinxg
-----------------------------------------------------------------------
这样是最佳的答案了呵!
-----------------------------------------------------------------------
你那时钟用在有的场合要注意,因为相对输入时钟两种输出时钟有不一致的延迟。最好还是根据SEPPD,使用一个速度比你目前高一倍的时钟(一个节拍或两个节拍)来做动作 回复【7楼】888888888888
-----------------------------------------------------------------------
我现在的设计要求还没有那么严格的时序,不过,谢谢888888888888 的提醒,我会作为把一个问题考虑周密的习惯听取你的意见的!谢谢,呵呵~~~
页:
[1]