无法使用模块实例化读取“wr_en,fifo_in”数据

问题描述 投票:0回答:1

我的实例化有什么问题吗? 8 到 32 位转换器工作正常。

仅当 wr_en 为高电平时,fifo 的输入才被读取。

wr_en连接到valid_q的输出信号(当valid_q=1时,完成8位到32位的转换)

下面的实例将“wr_en”连接到模块 fifo @ 源代码第 12 行中的“valid_q”

“fifo_in”连接到转换器的“data_out”

fifo仅当wr_en=1时才读取32位数据

我们需要再次在test_bench中驱动wr_en_tb和fifo_in_tb吗?

已经使用模块 converter_8_32 生成了“valid_q”和“data_out”

@源代码第12行 converter_8_32 fifo_dut(.clk(clk),.rst(rst),.valid_q(wr_en),.data_out(fifo_in));

// fifo to read 32 bit data if wr_en=1
module fifo(
    input clk,
    input rst,
    input wr_en,
    input [31:0] fifo_in,
    output [31:0] fifo_out);
 
reg [31:0] reg_fifo;
 
//fifo instantiation with converter module
converter_8_32 fifo_dut(.clk(clk),.rst(rst),.valid_q(wr_en),.data_out(fifo_in));
 
always @(*) begin
    if(!rst) begin
        reg_fifo<=0; end
        else if (wr_en==1'b1) begin
            reg_fifo<=fifo_in; end
        else reg_fifo<=0;    
end
assign fifo_out=reg_fifo;
endmodule
 
//converter block to convert 8 bit input to 32 bit output for every 4 clocks.
////output is valid if valid_q=1 where we receive 32 bit data out
 
module converter_8_32(
    input clk,
    input valid,
    input rst,
    output reg valid_q,
    input [7:0] data_in, //8 bit input
    output reg [31:0] data_out); //32 bit data out
 
reg [7:0] temp_reg [0:3];
 
integer N=4;
always @ (posedge clk or negedge rst) begin
    if (!rst) begin     
        data_out<=0;
        valid_q<=0;
            end
 
    else if (!valid) begin
            data_out<=0;
            valid_q<=0;
            N<=4;
                       end
               
    else begin            
        temp_reg[N-1]<=data_in;
        N=N-1;    
        if (N==0) 
        begin 
            valid_q<=1;
            N<=4;
            end
                else begin
                valid_q<=0;
                data_out<=data_in; end
            end
        end
                                            
 
always @ (posedge clk) begin
        if (N==0)
        // concatentaion operator to concatenate previous 3 data along
    // with preset data_in to generate 32 bit data
        data_out<={temp_reg[3],temp_reg[2],temp_reg[1],data_in};
            
end
 
endmodule


// **TEST BENCH**
`timescale 1ns/1ps
module fifo_tb();
reg clk_tb;
reg rst_tb;
reg valid_tb;
reg [7:0] data_in_tb;
wire valid_q_tb;
wire [31:0] data_out_tb;
 
reg wr_en_tb;
reg [31:0] fifo_in_tb;
wire [31:0] fifo_out_tb;
 
converter_8_32 dut_converter (.clk(clk_tb),.rst(rst_tb),.valid(valid_tb),.data_in(data_in_tb),.valid_q(valid_q_tb),.data_out(data_out_tb));
fifo dut_top (.clk(clk_tb),.rst(rst_tb),.wr_en(wr_en_tb),.fifo_in(fifo_in_tb),.fifo_out(fifo_out_tb));
 
always # 1 clk_tb=~clk_tb;
always #8 valid_tb=~valid_tb;
integer i;
 
initial begin
 clk_tb=0;
 rst_tb=0;
 valid_tb=1;
 data_in_tb=0;
 #2.5 rst_tb=1'b1; 
 //valid_tb=1'b1;
 #0.5;
 for (i=0;i<255;i=i+1) begin
     data_in_tb=i;
     #2;
 end
end
endmodule
undefined port verilog instantiation fifo
1个回答
0
投票

converter_8_32
模块内的
fifo
实例缺少一些连接。

当我运行仿真时,我使用 Cadence 模拟器看到这些编译器警告:

converter_8_32 fifo_dut(.clk(clk),.rst(rst),.valid_q(wr_en),.data_out(fifo_in));
                      |
xmelab: *W,CUVWSI : 2 input ports were not connected:
xmelab: valid
xmelab: data_in

当我在另一个模拟器(Synopsys)上运行时,我也看到类似的警告。

检查您的模拟日志文件中是否有类似消息。 如果您的模拟器没有显示警告,请在 EDA Playground 网站上尝试您的代码。

© www.soinside.com 2019 - 2024. All rights reserved.