在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2921|回复: 2

请教版主及各位同行-vhdl进程中沿触发信号的选择(是否必须同步化)???

[复制链接]
发表于 2004-8-6 23:48:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请教版主及各位同行:
   我在用vhdl语言编写一个曼切斯特收发器,其中编码部分间下面的程序:
   本程序已通过仿真与综合,我想实现应该没有问题(以前做过类似的程序,且在电路板中工作很好),可是看过大公司用vhdl编写的不少代码,发现他们在进程中一般都用唯一的时钟信号作为边沿触发条件。对于器件外部及内部的信号,多半采用两个级连的FF来获得该信号的沿触发条件(同步化),结果增加了不少额外的寄存器资源,如果我能够保证时序正常的情况下,为什莫不直接利用该信号作为该进程的触发条件呢?以下程序都有哪些不规范呢???
   希望各位大侠多多指点,让我从疑惑中解脱,不胜感激!!!!

--encode start
process(reset,EnEnd,EnEn)
begin
if reset = '1' or EnEnd = '1'  then
EnTimeEn <= '0';
EnReset <= '1';
elsif EnEn'event and EnEn = '1' then
EnTimeEn <= '1';
EnReset <= '0';
end if;
end process;
--encode  time divide
process (EnTimeEn, EnClk)
begin
if EnTimeEn = '0' then
EnCounts <= (others => '0');
esc <= '0';
elsif (EnClk'event and EnClk = '1' )then
if EnCounts = 2 then
EnCounts <= (others => '0');
esc <= not esc;
else
EnCounts <= EnCounts + 1;
end if;
end if;
end process;
--encode state machine
process(EnReset, esc)
variable EnBitNum : integer  range 16 downto 0 ;
begin
if Enreset = '1' then
EnBitNum := 16;
EnEnd <= '0';
EnState <= EnSync1;
SendGate1 <= '0';
boo <= '1';
bzo <= '1';
elsif esc'event and esc ='1' then
case EnState is
when EnSync1 =>
SendGate1 <= '1';
if ss = '1' then
bzo <= '0';
boo <= '1';
else bzo <= '1';
boo <= '0';
end if;
EnState <= EnSync2;
when EnSync2 =>
EnState <= EnSync3;
when EnSync3 =>
EnState <= EnSync4;
when EnSync4 =>
if ss = '1' then
bzo <= '1';
boo <= '0';
else bzo <= '0';
boo <= '1';
end if;
EnState <= EnSync5;
when EnSync5 =>
EnState <= EnSync6;
when EnSync6 =>
EnState <= EnData0;
when EnData0 =>
if SendReg(EnBitNum) = '1' then
bzo <= '0';
boo <= '1';
else
bzo <= '1';
boo <= '0';
end if;
EnBitNum := EnBitNum - 1;
EnState <= EnData1;
when EnData1 =>
bzo <= not bzo;
boo <= not boo;
if EnBitNum = 0 then
EnState <= EnOk;
else
EnState <= EnData0;
end if;
when EnOk =>
bzo <= '1';
boo <= '1';
EnEnd <= '1';
when others => EnEnd <= '1';
end case;
end if;
end process;
发表于 2004-8-7 16:11:25 | 显示全部楼层

请教版主及各位同行-vhdl进程中沿触发信号的选择(是否必须同步化)???

你所看到的是非常好的设计思路,整个设计中只有一个时钟的好处非常多,特别是做时序分析,以及信号传递时的建立保持时间等都有益处,而且设计中能利用时钟树的信号也是有限的,时钟过多有些就不能保证skew。
 楼主| 发表于 2004-8-9 12:44:43 | 显示全部楼层

请教版主及各位同行-vhdl进程中沿触发信号的选择(是否必须同步化)???

    谢谢班主!!!,我想我已经理解了你所说的含义了!!!
看来我的经验还太少了!!!,我想在稍微复杂一点的程序中应能
体会到这一点!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-30 21:08 , Processed in 0.022929 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表