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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2670|回复: 9

求助:异步FIFO中的一段程序!!

[复制链接]
发表于 2007-10-15 11:19:46 | 显示全部楼层 |阅读模式

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

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

x
StatCycle : process(WrClk,RdClk,RdEn,WrEn)
    variable RdC    : Std_Logic;  
    variable WrC    : Std_Logic;  
  begin
    RdC := RdClk and RdEn;
    WrC := WrClk and WrEn;
    En <= RdEn xor WrEn;
    UpDn <= WrEn;
    Clk <= WrC xor RdC;   
  end process;
这个程序用于产生空满判断模块的时钟Clk ,使能En.其中,WrClk,RdClk,RdEn,WrEn分别为读写时钟和使能.这个程序为什么这么编啊?看不懂啊!清高手指点!谢谢!
 楼主| 发表于 2007-10-16 08:07:31 | 显示全部楼层
帮忙看看!
发表于 2007-10-16 20:02:56 | 显示全部楼层
说实话,我还是第一次见这种异步FIFO的写法,把时钟颠来倒去的做处理,仿真可能还可以,如果做综合,电路不会有什么好结果,要对时钟做处理那应该到晶体管电路级去认真分析设计,而不是通过语言描述得到。
发表于 2007-10-16 21:20:00 | 显示全部楼层
完全看不明白,为什么不用同步化电路阿?
 楼主| 发表于 2007-10-17 09:01:40 | 显示全部楼层
这是xilinx的IP核开源代码,不会有错误的!
 楼主| 发表于 2007-10-17 09:09:39 | 显示全部楼层
entity FIFOcnt is
    port (
        ClkIn  : in  Std_Logic;
        Reset  : in  Std_Logic;
        Enable : in  Std_Logic;
        CntOut : out Std_Logic_Vector(3 downto 0));--4为格类码
end FIFOcnt;
-----------------------------------------------------------------------
-- Architecture for 16-bit GRAY counter - generates the internal clock
-----------------------------------------------------------------------
architecture Behaviour of FIFOcnt is
  ---------------------------------------------------------------------
  -- Signals
  ---------------------------------------------------------------------  
  type CNT_Array is array(0 to 15) of Std_Logic_Vector(3 downto 0);
  constant Cnt_Code : CNT_Array := ("0000","0010","0011","0001",   --格雷码初始化
                                    "1000","1010","1011","1001",
                                    "1100","1110","1111","1101",
                                    "0100","0110","0111","0101");
  signal binidx : Unsigned(3 downto 0);
begin --======================== Architecture =======================--
  process(ClkIn,Reset,Enable) --地址指针计数
  begin
     if Reset = '1' then
        binidx <= (others => '0');
     elsif ClkIn'Event and ClkIn = '1' then
        if Enable = '1' then
           binidx <= binidx + "1";
        end if;
     end if;
  end process;
  CntOut <= Cnt_Code(ToInteger(binidx));  --调用函数转换数据其中Cnt_Code(格雷码)作为地址
end Behaviour; --================ End of architecture ================--

这个是地址的计算,他用的是格雷码,但是Cnt_Code 的地址的设置就不明白了????
发表于 2007-10-17 10:39:10 | 显示全部楼层

程序不规范

不要用变量,用信号
发表于 2007-10-17 10:40:14 | 显示全部楼层

实际实现总是用IPcore

实际实现总是用IPcore
 楼主| 发表于 2007-10-18 14:15:24 | 显示全部楼层
dingdingdingding
发表于 2007-11-5 21:18:01 | 显示全部楼层
verilog
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-22 21:06 , Processed in 0.035616 second(s), 8 queries , Gzip On, Redis On.

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