集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1396|回复: 4

如何用verilog写异步的fifo

[复制链接]
zxopen08 发表于 2016-6-18 10:26:38 | 显示全部楼层 |阅读模式
我想写一个FIFO,异步的,写时钟是64K,读时钟是256K,输入的信号是是64Kbit/s,自己写了一个程序,但仿真出来 不对,数据 出来应该是压缩的才对,即压缩成原来的1/4,大家帮看看该怎么写。
module    myfifo2(clk_1,indata,clk_2,outdata);
input     clk_1;                               //write clock//
input     indata;                              //input data//
input     clk_2;                               //read  clock//
output    outdata;                            // output data//
parameter DEPTH=256,MAX_COUNT=8'b11111111;     //256*1//
reg       emptyp=1'b1;                         //empty flag//
reg       fullp=1'b0;                          //full  flag//
reg       outdata;
reg[DEPTH-1:0]  tail=8'b00000000;              //tail pointer//
reg[DEPTH-1:0]  head=8'b00000000;              //head pointer//
reg       fifomem[0:MAX_COUNT];                //define the memory//
integer      COUNT_1=0;
integer      COUNT_2=0;         
//write//
always    @(posedge clk_1 )
           
            if(emptyp==1'b1)
                 begin fifomem[head]<=indata;                 
                  end
//read//
always    @(posedge  clk_2)
              if(fullp==1'b1)
                    begin  outdata<=fifomem[tail];
                    end
//update the head register//
always    @(posedge clk_1)  begin
          if(emptyp==1'b1)  begin
          head<=head+1;
                            end
                            end
//update the tail register//
always    @(posedge clk_2)  begin
          if(fullp==1'b1)   begin
          tail<=tail+1;     end
                            end
//update the count regsiter//
always    @(posedge clk_1)
          if(emptyp==1'b1)    begin
              if(COUNT_1!=MAX_COUNT) begin
                COUNT_1<=COUNT_1+1;  end
              else COUNT_1=0; end

always    @( posedge   clk_2)
           if(fullp<=1'b1)     begin
               if(COUNT_2!=MAX_COUNT) begin
                 COUNT_2<=COUNT_2+1;  end
              else COUNT_2=0; end
// update the flags//
always    @( COUNT_1)   begin
          if(COUNT_1==DEPTH-1)    begin
                 emptyp<=1'b0;        end
          else
                  emptyp<=1'b1 ;       end
                  
always    @(COUNT_2)   begin
          if(COUNT_2==DEPTH-1)    begin
                 fullp<=1'b0;         end
          else
                 fullp<=1'b1;          end
                  
endmodule
                  
阿亮 发表于 2017-5-17 22:37:22 | 显示全部楼层
这个不太清楚了
d643189658 发表于 2017-8-11 19:17:09 | 显示全部楼层
谢谢楼主的分享
chen 发表于 2017-8-12 13:38:47 来自手机 | 显示全部楼层
学习学习学习
雷磊 发表于 2022-12-7 17:14:08 | 显示全部楼层
课程设计--电梯控制器
http://www.fpgaw.com/forum.php?m ... 9&fromuid=54563
(出处: fpga论坛|fpga设计论坛)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-8 14:46 , Processed in 0.074622 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表