微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助:异步FIFO中的一段程序!

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

时间:10-02 整理:3721RD 点击:
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分别为读写时钟和使能.这个程序为什么这么编啊?看不懂啊!清高手指点!谢谢!

帮忙看看!

说实话,我还是第一次见这种异步FIFO的写法,把时钟颠来倒去的做处理,仿真可能还可以,如果做综合,电路不会有什么好结果,要对时钟做处理那应该到晶体管电路级去认真分析设计,而不是通过语言描述得到。

完全看不明白,为什么不用同步化电路阿?

这是xilinx的IP核开源代码,不会有错误的!

entity FIFOcnt is
port (
ClkIn: inStd_Logic;
Reset: inStd_Logic;
Enable : inStd_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 的地址的设置就不明白了?

程序不规范
不要用变量,用信号

实际实现总是用IPcore
实际实现总是用IPcore

dingdingdingding

verilog

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top