Как подписать-расширить число в Verilog

Я работаю над простым расширителем знаков в Verilog для процессора, который я создаю для компьютерной архитектуры .

Вот что у меня есть на данный момент: [EDIT: немного изменил оператор выбора]

`timescale 1ns / 1ps

module SignExtender( CLK, extend, extended );
input[7:0] extend;
input CLK;
output[15:0] extended;

reg[15:0] extended;
wire[7:0] extend;

always
begin
    while (CLK == 1)
    extended[7:0] = extend[7:0];
    extended[15:8] = {8{extend[7]}};
end
endmodule

Я добавил while (CLK == 1), думая, что это решит мою проблему, которая, как мне кажется, представляет собой бесконечный цикл. Когда я пытаюсь проверить это в iSim, схема никогда не инициализируется.

Я также попытался удалить синтаксис копирования и просто использовал расширенный [8] = extend [7] и т. Д. Для [8] - [15], но получился тот же результат, поэтому я почти уверен, что самый внутренний синтаксис верный.

Вот тестовый файл:

`timescale 1ns / 1ps
module SignExtender_testbench0;

    // Inputs
    reg [7:0] extend;
    reg CLK;

    // Outputs
    wire [15:0] extended;

    // Instantiate the Unit Under Test (UUT)
    SignExtender uut (
        .extend(extend), 
        .extended(extended)
    );

    initial begin
        // Initialize Inputs
        extend = 0;

        #100; // Wait 100 ns for global reset to finish

        extend = -30;
        CLK = 1;
        #10;
        CLK = 0;
        if (extended == -30)
            $display("okay 1");
        else
            $display("fail 1");

        extend = 40;
        #10;
        if (extended == 40)
            $display("okay 2");
        else
            $display("fail 2");

    end

endmodule

Есть идеи, как я могу это сделать успешно?

8
задан JigarGandhi 9 December 2014 в 10:06
поделиться