跳轉到

Vectors

Vectors

原題:Vectors

將[2:0] vec分別賦值給[2:0] outv和{o2,o1,o0},補充說明,assign {o2,o1,o0} = vec;等價於assign o2 = vec[2]; assign o1 = vec[1]; assign o0 = vec[0];

Verilog
module top_module ( 
    input wire [2:0] vec,
    output wire [2:0] outv,
    output wire o2,
    output wire o1,
    output wire o0  ); // Module body starts after module declaration
    assign outv = vec;
    assign {o2,o1,o0} = vec;
endmodule

Vectors in more detail

原題:Vectors in more detail

和前一題很類似,assign {out_hi,out_lo} = in;等價於assign out_hi = in[15:8]; assign out_lo = in[7:0];

Verilog
`default_nettype none     // Disable implicit nets. Reduces some types of bugs.
module top_module( 
    input wire [15:0] in,
    output wire [7:0] out_hi,
    output wire [7:0] out_lo );
    assign {out_hi,out_lo} = in;
endmodule

Vector part select

原題:Vector part select

和前一題很類似,assign out = {in[7:0],in[15:8],in[23:16],in[31:24]};等價於assign out[31:24] = in[ 7: 0]; assign out[23:16] = in[15: 8]; assign out[15: 8] = in[23:16]; assign out[ 7: 0] = in[31:24];

Verilog
module top_module( 
    input [31:0] in,
    output [31:0] out );
    assign out = {in[7:0],in[15:8],in[23:16],in[31:24]};
endmodule

Bitwise operators

原題:Bitwise operators

這裡整理 bitwise operators 與 logical operators 的差異。例如 bitwise OR 是 |,logical OR 是 ||;bitwise NOT 是 ~,logical NOT 是 !。本題的 NOT 是 bitwise NOT。

Verilog
module top_module( 
    input [2:0] a,
    input [2:0] b,
    output [2:0] out_or_bitwise,
    output out_or_logical,
    output [5:0] out_not
);
    assign out_or_bitwise = a | b;
    assign out_or_logical = a || b;
    assign out_not = ~ {b,a};
endmodule

Four-input gates

原題:Four-input gates

複習各種 gate 的用法。

Verilog
module top_module( 
    input [3:0] in,
    output out_and,
    output out_or,
    output out_xor
);
    assign out_and = in[3] & in[2] & in[1] & in[0];
    assign out_or = in[3] | in[2] | in[1] | in[0];
    assign out_xor = in[3] ^ in[2] ^ in[1] ^ in[0];
endmodule

Vector concatenation operator

原題:Vector concatenation operator

說明concatenation的概念,然後因為題目要求要padding11在最右邊2bits,所以要加上2'b11。

Verilog
module top_module (
    input [4:0] a, b, c, d, e, f,
    output [7:0] w, x, y, z );//

    assign {w,x,y,z} = {a,b,c,d,e,f,2'b11};

endmodule

Vector reversal 1

原題:Vector reversal 1

可以用 concatenation 直接完成;若想用迴圈接線,也可以參考 generate 語法。

Verilog
module top_module( 
    input [7:0] in,
    output [7:0] out
);
    generate
        genvar i;
        for (i=0; i<8; i = i+1) begin: my_block_name
            assign out[i] = in[8-i-1];
        end
    endgenerate
endmodule

Replication operator

原題:Replication operator

將8 bit轉成32 bit,並且多餘的24bit要填入in[7],所以語法如下。

Verilog
module top_module (
    input [7:0] in,
    output [31:0] out );//

    assign out = { { 24{ in[7] } },in};

endmodule

More replication

原題:More replication

也是練習replication,aaaaabbbbbcccccdddddeeeee可以寫成{ {5{a}},{5{b}},{5{c}},{5{d}},{5{e}}},abcdeabcdeabcdeabcdeabcde可以寫成{5{a,b,c,d,e}}

Verilog
module top_module (
    input a, b, c, d, e,
    output [24:0] out );//
    assign out = ~({ { 5{a} },{5{b}},{5{c}},{5{d}},{5{e}}} ^ {5{a,b,c,d,e}});
endmodule