⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 异步fifo.v

📁 用双端口ram实现异步fifo
💻 V
字号:
//下面为自然码转化为格雷码的程序:
 module norm??_to_gray(din,dout,EN);
   parameter width=8;
input[width-1:0] din;
output[width-1:0];
integer i;
always@(din or EN)
 begin
   for(i=0,j=0;i<width-1;i=i+1)
    begin
     dout[i]=(din[i]^din[i+1])&&EN;
    end
dout[width-1]=din[width-1]&&EN;
end
   endmodule
//格雷码到自然码的转换:
  module gray_to_norm(din,dout,EN);
parameter width=8;
input[width-1:0] din;
output[width-1:0] dout;
integer i;
assign dout[width-1]=din[width-1];
always@(din or EN)
 for(i=width-2;i>=0;i=i-1)
   begin
    dout[i]=din[i]^dout[i+1]&&EN;
   end
endmodule
 //写地址产生程序:
module crwaddgray(wadd_gray);
parameter width=8;
output[width-1:0] wadd_gray;
always @(posedge wclk or negedge rst) //rst是复位信号
 begin
 if(!rst)
  wadd<=0;       //初始自然码写指针
     else
begin
 wadd<=wadd+1;
norm_to_gray(wadd,wadd_gray,EN);
end
   end
//读地址产生程序类似写地址产生程序。
//满标志产生程序:
  module crfull(full,EN);
   output full;
   crwadd(wadd_gray);
   crradd(radd_gray);
  always @(radd_gray or wadd_gray)
   begin
     gray_to_norm(wadd_gray,wadd,EN);
     gray_to_norm(radd_gray,radd,EN);
     if(radd[width-1]!=wadd[width-1]&&rad[width-2:0]==wadd[width-2:0])
       full<=1;
     else
       full<=0;
   end
endmodule
//空标志产生程序:
 module crempty(empty,EN);
  output empty;
  crwadd(wadd_grgay);
  crradd (radd_gray);
  always @(radd_gray or wadd_gray)
   begin
gray_to_norm(wadd_gray,wadd,EN);
gray_to_norm(radd_gray,radd,EN);
if(radd[width-1]= =wadd[width-1]&&radd[width-2:0]= =wadd[width-2:0])
 empty<=1;
else
 empty<=0;
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -