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];。
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
和前一題很類似,assign {out_hi,out_lo} = in;等價於assign out_hi = in[15:8]; assign out_lo = in[7:0];。
`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
和前一題很類似,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];。
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 與 logical operators 的差異。例如 bitwise OR 是 |,logical OR 是 ||;bitwise NOT 是 ~,logical NOT 是 !。本題的 NOT 是 bitwise NOT。
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
複習各種 gate 的用法。
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
說明concatenation的概念,然後因為題目要求要padding11在最右邊2bits,所以要加上2'b11。
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
可以用 concatenation 直接完成;若想用迴圈接線,也可以參考 generate 語法。
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
將8 bit轉成32 bit,並且多餘的24bit要填入in[7],所以語法如下。
module top_module (
input [7:0] in,
output [31:0] out );//
assign out = { { 24{ in[7] } },in};
endmodule
More replication
也是練習replication,aaaaabbbbbcccccdddddeeeee可以寫成{ {5{a}},{5{b}},{5{c}},{5{d}},{5{e}}},abcdeabcdeabcdeabcdeabcde可以寫成{5{a,b,c,d,e}}。