2017-05-26 4 views
1

私は数日間試していますが、挫折しています。私は間違いを犯すことができません。あなたが誰かを助けてくれたら、私は感謝しています。私のコードは、トップモジュールの内部に2つのモジュールがあり、すべてを完全に接続した後、モジュールの接続はどうにか動作しません。あるサブモジュールから別のサブモジュールの入力への出力が欠落しています(最初のサブモジュールから常にコードを削除した場合)。私のvc_buffersモジュール内で常時コードのコメントが外されていると、RTL回路図のvc_buffersモジュールが表示されません。Verilogで2つのサブモジュールの間にデータ線を接続できません

`timescale 1ns/1ps 
`include "parameters.v" 

module router(
    clk, 
    rst, 
    flit_in, 
    flit_out 
    ); 

localparam flit_size = flit_ctrl + flit_data; 
localparam fifo_depth = buffer_depth - 1; 
localparam fifo_counter = fifo_depth; 

input clk, rst; 

input [flit_size-1:0] flit_in; 
wire [flit_size-1:0] flit_in; 

output [flit_size-1:0] flit_out; 
wire [flit_size-1:0] flit_out; 

wire [flit_size-1:0] flit_buffers_fifo; 
wire vc_empty_sig, vc_wr_en_sig; 


////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////// VC BUFFER INST ///////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////// 

vc_buffers vc_buffers_0(
    .clk(clk), 
    .rst(rst), 
    .vc_flit_in_0(flit_in), 
    .vc_flit_out_0(flit_buffers_fifo), 
    .vc_empty_0(vc_empty_sig), 
    .vc_wr_en_0(vc_wr_en_sig) 
    ); 


////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////// FIFO INST ////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////// 

fifo fifo_0(
    .clk(clk), 
    .rst(rst), 
     .wr_en(vc_wr_en_sig), 
     .rd_en(), 
    .flit_in(flit_buffers_fifo), 
    .flit_out(flit_out), 
    .empty(vc_empty_sig), 
    .full() 
    ); 


endmodule 




////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////// VC BUFFER ///////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////// 
module vc_buffers(
    clk, 
    rst, 
    vc_empty_0, 
    vc_flit_in_0, 
    vc_flit_out_0, 
    vc_wr_en_0 
    ); 

localparam flit_size = flit_ctrl + flit_data; 
localparam fifo_depth = buffer_depth - 1; 
localparam fifo_counter = fifo_depth; 

input clk; 
input rst; 

input vc_empty_0; 
wire vc_empty_0; 

input [flit_size-1:0] vc_flit_in_0; 
wire [flit_size-1:0] vc_flit_in_0; 

output vc_wr_en_0; 
reg vc_wr_en_0; 

output [flit_size-1:0] vc_flit_out_0; 
reg [flit_size-1:0] vc_flit_out_0; 



always @(posedge clk) 
begin 

    if(rst) begin 
     vc_wr_en_0 <= 0; 
    end else begin 

     if (vc_empty_0) begin 
      vc_wr_en_0 <= 1; 
      //vc_flit_out_tmp_0 <= vc_flit_in_0; //Assign flit on input pins of router port 0 
      //vc_flit_out_wire_0 <= vc_flit_in_0; //Assign flit on input pins of router port 0 
      vc_flit_out_0 <= vc_flit_in_0; //Assign flit on input pins of router port 0 
      vc_wr_en_0 <= 0; 
     end else begin 
       vc_wr_en_0 <= 0; 
       // Discard buffer as there is no space in vc input buffer 
     end 

    end 

end 

endmodule 




////////////////////////////////////////////////////////////////////////////////// 
//////////////////////////// FIFO ////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////////////////// 
module fifo(
    clk, 
    rst, 
     wr_en, 
     rd_en, 
    flit_in, 
    flit_out, 
    empty, 
    full 
    ); 



localparam flit_size = flit_ctrl + flit_data; 
localparam fifo_depth = buffer_depth - 1; 
localparam fifo_counter = fifo_depth; 


input clk; 
input rst; 
input wr_en; 
input rd_en; 
input [flit_size-1:0] flit_in; 
output [flit_size-1:0] flit_out; 
output full, empty; 

wire rd_en; 
wire wr_en; 
wire [flit_size-1:0] flit_in; 

reg [flit_size-1:0] flit_out;  
reg [fifo_depth-1:0] head; 
reg [fifo_depth-1:0] tail; 
reg empty; 
reg full; 

reg [flit_size-1:0] memory [0:7];  

always @(posedge clk) 
begin 
    if (rst) begin 
     empty <= 1; 
     full <= 0; 
     flit_out <= 0; 
     head <= 0; 
     tail <= 0; 
    end else begin 

     case ({wr_en, rd_en}) 
     2'b10, 
     2'b1x, 
     2'b1z: 
     begin 
      if (empty) begin 
       memory[head] <= flit_in; 
       head <= (head == fifo_counter)?0:head+1; 
      end else begin 
       // do nothing 
      end 
     end 
     2'b01, 
     2'bx1, 
     2'bz1: 
     begin 
      flit_out <= memory[tail]; 
      tail <= (tail == fifo_counter)?0:tail+1; 
     end 
     default:; 
     endcase 

    end 


    if (head == fifo_counter) begin 
     full <= 1; 
     empty <= 0; 
     end else begin 
     end 

    if (tail == fifo_counter) begin 
     empty <= 1; 
     full <= 0; 
     end else begin 
     end 

end 

endmodule 

答えて

0

問題の実際のルートをトレースしようとしています。 rd_en信号をトップモジュールに接続する以外に、実際の問題は1と0を同じrd_enとwr_en信号に割り当てることでした。それを並べ替えた後、すべてがクールに見えます。私が思うには、誰かがそれを確認できるかどうか分かります。

旧コード:私はちょうどvc_wr_en_0を削除

if (vc_empty_0) begin 
      vc_wr_en_0 <= 1; 
      vc_flit_out_0 <= vc_flit_in_0; //Assign flit on input pins of router port 0 
      vc_wr_en_0 <= 0; 

< = 0;

ありがとうございました

2

RD_ENがトップモジュールに接続されていないためです。ここで

は完全なコードです。 fifoのcase文のため、flit_outなどの出力値は変更されません。したがって、vc_bufferの入力値 "flit_buffers_fifo"は一定であり、トリムされます。 rd_enを1'b1に初期化すると、変更が表示されます。 より良い方法は、トップモジュール信号のリストにrd_enを置き、それをfifoモジュールに接続することです。

+0

ありがとうございますLaleh。それは魔法のように働いた。 :) –

+1

@ user3773485これが正解であれば、それを緑色に変えるようにチェックしてください。これにより、他の人が正しい答えを受け取ったことを知ることができます。 – Morgan

関連する問題