0

私の現在のタスクは、メモリ ドライバーを作成することです。具体的な問題は、4 つの 8 ビット ワードを 1 つの 32 ビットに連結し、それを出力に送信するように設計されたシフト レジスタがあることです。モジュールは単独でシミュレートされている場合は機能しますが、他のモジュールに接続すると応答しません。コードは次のとおりです。

シフト レジスタ コード:

module shiftReg (

data_8,
clk,
valid1,
rstn,
data_32,
valid_fifo,
count,
REGA,
REGB,
REGC,
REGD
);

input wire [7:0] data_8;
input wire valid1;
input wire clk;
input wire rstn;
output reg [31:0] data_32;
output reg valid_fifo;
output reg [3:0] count;

output reg [7:0] REGA;
output reg [7:0] REGB;
output reg [7:0] REGC;
output reg [7:0] REGD;


initial 
begin
    count <= 4'b0001;
    REGA <= 8'b0;
    REGB <= 8'b0;
    REGC <= 8'b0;
    REGD <= 8'b0;
    valid_fifo <= 1'b0;
end

always @(posedge valid1)
begin
    if(~rstn)
        begin
            count = 4'b0001;
            REGA = 0;
            REGB = 0;
            REGC = 0;
            REGD = 0;
        end
else if(valid1 == 1'b1)
            begin
                case (count)
                    4'b0001: REGA = data_8;
                    4'b0010: REGB = data_8;
                    4'b0100: REGC = data_8;
                    4'b1000: REGD = data_8;
                endcase
                    valid_fifo = 1'b0;
            end
                if(count == 4'b1000)
                    begin

                        data_32 = {REGD,REGC,REGB,REGA};
                        valid_fifo = 1'b1;
                        count = 4'b0001;
                    end
            else 
                begin
                        count = count << 1;
                end
    end
endmodule

インスタンス化するモジュールは完全に呼び出されます。コードは次のとおりです。

module altogether (
input  wire BUTTON_AT,
input  wire CLK_AT,
input  wire RSTN_AT,
output wire MEM_FULL_AT,
output wire EMPTY_AT,
inout  wire VALID_IN_AT,
inout  wire [7:0] DATA_8_AT,
inout  wire VALID1_AT,
inout  wire [31:0] DATA_32_AT,
inout  wire STOP_AT,
inout  wire VALID_FIFO_AT,
inout  wire [31:0] DATA_AT,
inout  wire WR_AT,
inout  wire [6:0] ADDR_AT,
output wire [7:0] REG_A_AT,
output wire [7:0] REG_B_AT,
output wire [7:0] REG_C_AT,
output wire [7:0] REG_D_AT,
output wire [3:0] COUNT_AT
);

shiftReg shift_register (
.data_8(DATA_8_AT),
.clk(CLK_AT),
.valid1(VALID_1_AT),
.rstn(RSTN_AT),
.data_32(DATA_32_AT),
.valid_fifo(VALID_FIFO_AT),
.REGA(REG_A_AT),
.REGB(REG_B_AT),
.REGC(REG_C_AT),
.REGD(REG_D_AT),
.count(COUNT_AT)
);

何らかの理由で、valid == 1'b1シフトレジスタを他のすべてと一緒に配置すると、条件が実行されません。私は本当にアイデアを使い果たしました。誰かがそれを見て、私に洞察を与えてくれることを願っています.

4

1 に答える 1

2

合成中のどこかでVALID_1_AT、ドライバーのないシグナルを使用しているという警告が表示された可能性があります。これは、altogetherモジュール宣言でシグナルを定義するためです (シグナル名に欠落があることにVALID1_AT注意してください)。_そのためvalid1、シフト レジスタはまったく駆動されません。

変更する必要があります:

.valid1(VALID_1_AT)

の中へ:

.valid1(VALID1_AT)

それが機能するようにします。

于 2015-08-03T10:27:22.740 に答える