微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 帮忙看一下为什么没有输出?

帮忙看一下为什么没有输出?

时间:10-02 整理:3721RD 点击:
module rd_logic(
clk,
rst,
wr_ack,
valid,
rd_en
    );
input clk;
input rst;
input wr_ack;
input valid;
output rd_en;
reg [5:0] wr_count=6'b000000;
reg [5:0] temp=6'b000000;
reg rd_en;
always @(posedge clk or posedge rst)
begin
if(rst)
  wr_count<=0;
else
  begin
  if((wr_ack==1)&&(valid==0))
  
  wr_count<=wr_count+6'b000001;
  
  else
  begin
  if(wr_count==6'b110010)
   begin
   
   temp<=wr_count;
   wr_count<=0;
   
   if((wr_ack==0)&&(valid==1))
        temp<=temp-6'b000001;
            else
         temp<=temp;
   end
  else
   wr_count<=wr_count;
  end
  end
end
always @(posedge clk or posedge rst)
begin
if(rst)

  rd_en<=0;
  
else
begin

  if(temp==6'b110010)
  
   rd_en<=1;
   
  else if (temp==6'b000000)
  
   rd_en<=0;
   
  else
  
   rd_en<=rd_en;
   
end

end
endmodule

说明:利用wr_count 计数,为50时,rd_en有效,开始读数据,将wr_count的值赋给一个临时变量temp,成功读出一个数据时,temp值减1,直到temp值为零时,表示着五十个数据已经成功读出,再进行计数,满五十重复以上操作。
可是输出一直为零,不知道哪里的逻辑不对,帮忙看看,谢谢!



什么狗屁code

首先,你的reg [5:0] wr_count=6'b000000;  reg [5:0] temp=6'b000000;这么写是不对的,仿真没有问题,综合的时候会出错的,应该在复位模块中对其赋值。
其次,我觉得问题可能出在temp<=wr_count; wr_count<=0;你好好想想你的时序。

首先,你的reg [5:0] wr_count=6'b000000;  reg [5:0] temp=6'b000000;这么写是不对的,仿真没有问题,综合的时候会出错的,应该在复位模块中对其赋值。
其次,我觉得问题可能出在temp<=wr_count; wr_count<=0;你好好想想你的时序。



    哪凉快哪呆着去,得瑟什么呀!



    嗯,好,我在仔细检查一下~

说实话写的确实很不怎么样。reg [5:0] wr_count=6'b000000 意思是wr_count是恒定值。如果你想赋初始值,在testbanch里用initial语句。你写的是 if((wr_ack==1)&&(valid==0))时计数器加1,加到50时有输出,可你波形图里wr_ack==1&&valid==0才有几个周期啊?还有好多逻辑错误,看着感觉像第一次写代码似的

仿真看一下temp的值是否正确
问题有可能是出在这里的
然后再确认一下testbench有没有问题的



    刚学不久

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

网站地图

Top