OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4796|回复: 5

[ALTERA] vivado中的FIFO32位数字位宽转8位数字位宽输出

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2022-4-25
在线时间
3 小时
发表于 2022-4-25 10:20:42 | 显示全部楼层 |阅读模式
1金钱
有没有大佬会写32位转8位的。为什么我这个输出会是0啊。球球了,孩子已经崩溃了!!module untitled_bd_wrapper   (clk,
    rst_n,
    dout

    );
  input clk;
  input rst_n;
  output [7:0]dout;


  wire                  clk;
  wire [31:0]           gateway_out;
  wire                  rst_n;
  wire                  rdy;
  wire                  din_vld;
  wire                  clk_out;
  reg     [1:0]         cnt;
  wire                  add_cnt;
  wire                  end_cnt;
  reg                   fifo_wren;
  reg     [31:0]        fifo_din;
  wire                  fifo_rden;
  wire    [31:0]        fifo_dout;
  wire                  fifo_empty;
  wire    [5:0]         fifo_wrcount;
  reg     [7:0]         dout;
  reg                   dout_vld;

  untitled_bd untitled_bd_i
       (.clk(clk),
        .gateway_out(gateway_out));

fifo_generator_0 fifo_generator_inst (
  .rst(rst_n),                      // input wire rst
  .wr_clk(clk),                // input wire wr_clk
  .rd_clk(clk),                // input wire rd_clk
  .din(fifo_din),                      // input wire [31 : 0] din
  .wr_en(fifo_wren),                  // input wire wr_en
  .rd_en(fifo_rden),                  // input wire rd_en
  .dout(fifo_dout),                    // output wire [7 : 0] dout
//full(full),                    // output wire full
  .empty(fifo_empty),                  // output wire empty
//rd_data_count(rd_data_count),  // output wire [11 : 0] rd_data_count
  .wr_data_count(fifo_wrcount)  // output wire [9 : 0] wr_data_count
);   

always@(posedge clk or negedge rst_n )begin
    if(rst_n==1'b0)begin
        fifo_wren <= 1'b0;
    end
    else if(din_vld && fifo_wrcount <= 1024)begin
        fifo_wren<=1'b1;
    end
    else begin
         fifo_wren <= 1'b0;
     end
end

always@(posedge clk or negedge rst_n )begin
    if(rst_n==1'b0)begin
        fifo_din <= 32'b0;
    end
    else if(din_vld)begin
        fifo_din <= gateway_out;
    end
end


always@(posedge clk or negedge rst_n )begin
    if(!rst_n)begin
        cnt <= 0;
    end
    else if(add_cnt)begin
        if(end_cnt)
            cnt <= 0;
        else
            cnt = cnt+1;
    end
end

assign add_cnt = rdy && !fifo_empty;
assign end_cnt = add_cnt && cnt == 4-1;

assign fifo_rden = end_cnt;

always@(posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0)begin
        dout <= 8'b0;
    end
    else begin
        dout <= fifo_din[31-8*cnt -:8];//fifo_dout 没数据  
    end
end

always@(posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0)begin
        dout_vld <= 1'b0;
    end
    else if(add_cnt) begin
        dout_vld <= 1'b1;
    end
    else begin
        dout_vld <= 1'b0;
    end
end        


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2020-8-24
在线时间
90 小时
发表于 2022-4-25 13:26:04 | 显示全部楼层
FIFO两边可以配置成不同宽度的,如32位输入,8位输出的模式。
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2022-4-25
在线时间
3 小时
 楼主| 发表于 2022-4-25 14:48:06 | 显示全部楼层
谢谢您的指教,可是我都设置好FIFO的IP了 并且也例化好了,就是只有输入,输出一直都是0
回复

使用道具 举报

3

主题

1979

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5520
金钱
5520
注册时间
2018-10-21
在线时间
1561 小时
发表于 2022-4-26 09:07:51 | 显示全部楼层
看下fifo的空满信号,数据有没有写进去
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2022-4-25
在线时间
3 小时
 楼主| 发表于 2022-4-26 09:52:43 | 显示全部楼层
好的 谢谢您 那我看一下。
回复

使用道具 举报

13

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2012-10-27
在线时间
65 小时
发表于 2022-5-5 23:47:10 | 显示全部楼层
你的FIFO一直处在Reset状态

Xilinx Vivado IP 一般是高电平Active。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 00:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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