首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助::帮我看看程序错误!!

求助::帮我看看程序错误!!

我是初学者,要实现一个fifo的功能,程序读写时钟不一致,读比写的时钟要慢一些,自己动手编了下面程序,运行了以后有错误,哪位大虾帮我看看,谢了.运行警告错误如下:


WARNING:Xst:528 - Multi-source in Unit <fifo1> on signal <counter1_3> not replaced by logic
Sources are: counter1_ren_3, counter1_3
WARNING:Xst:528 - Multi-source in Unit <fifo1> on signal <counter1_0> not replaced by logic
Sources are: counter1_ren_0, counter1_0
WARNING:Xst:528 - Multi-source in Unit <fifo1> on signal <counter1_1> not replaced by logic
Sources are: counter1_ren_1, counter1_1
WARNING:Xst:528 - Multi-source in Unit <fifo1> on signal <counter1_2> not replaced by logic
Sources are: counter1_ren_2, counter1_2
ERROR:Xst:415 - Synthesis failed
CPU : 2.63 / 4.14 s | Elapsed : 2.00 / 4.00 s
 
-->


Total memory usage is 51256 kilobytes


 


module fifo1(clk,reset,datain,dataout1,full1,empty1);//16*4 fifo
input clk,reset;   //
input [3:0] datain;    //数据输入
output [3:0] dataout1;  //存储器数据输出
output empty1,full1;    //存储单元空、满标志位


reg [3:0] dataout1;
reg[3:0] read_ptr1,write_ptr1; //读写地址指针
reg[3:0] counter1;  //记数器
reg empty1,full1;


reg [3:0] ram1 [0:15];//16*4存储单元


  wire clk1;
  wire [25:0] d;
  assign d =26'd00_005; //d为分频数 


 Freq_Div myFreq_Div1 (
    .Clk_Sys(clk),
    .Div(d),
    .Reset(reset),
    .Clk_User(clk1)
    );


always @(posedge clk) //写存储单元
      begin
      if(reset)
     begin
   write_ptr1=2'b00;
   counter1=2'b00;
   full1=0;
         end
    
   else if(counter1<15)
      begin
   ram1[write_ptr1]=datain;  //将数据输入存储单元
   counter1=counter1+1;           //每写入一个数计数器加一
              write_ptr1=(write_ptr1==15)?0:write_ptr1+1; //写满返回首地址,否则写地址指针加一
      end
     else
      begin
       full1=1;
       counter1=15;    //存储器满标志位
          end
       end


always @(posedge clk1)   //读子程序


       if(reset)
     begin
     read_ptr1=2'b00;
     dataout1=2'b00;
     empty1=1;
     end
     
   else if(counter1!=0)
           begin
              dataout1=ram1[read_ptr1];
              counter1=counter1-1;
              read_ptr1=(read_ptr1==15)?0:read_ptr1+1;
               end
        else
       empty1=1;    //存储器空
         
     
endmodule

返回列表