2.2Vectors
2.2.1Vectors
问题陈述:
构建一个具有一个 3 位输入的电路,然后输出相同的向量,并将其拆分为三个单独的 1 位输出。将输出连接o0到输入向量的位置 0、o1位置 1 等。
在图中,旁边带有数字的刻度线表示向量(或“总线”)的宽度,而不是为向量中的每个位绘制单独的线。
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=outv[2];
assign o1=outv[1];
assign o0=outv[0];
endmodule
2.2.2 Vectors in more detail
问题陈述:
构建一个组合电路,将输入半字(16 位, [15:0] )拆分为低 [7:0] 和高 [15:8] 字节
Verilog代码:
module top_module(
input wire [15:0] in,
output wire [7:0] out_hi,
output wire [7:0] out_lo );
assign out_hi=in[15:8];
assign out_lo=in[7:0];
endmodule
2.2.3 Vector part select
问题陈述:
一个 32 位向量可以被视为包含 4 个字节(位 [31:24]、[23:16] 等)。构建一个将反转4 字节字 的字节顺序的电路。
AaaaaaaBbbbbbbbbCccccccDdddddddd => DddddddCccccccBbbbbbbbbAaaaaaa
Verilog代码:
module top_module (
input [31:0] in,
output [31:0] out
);
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];
endmodule
2.2.4Bitwise operators
问题陈述:
构建一个具有两个 3 位输入的电路,用于计算两个向量的按位或、两个向量的逻辑或以及两个向量的逆 (NOT)。将b的反放在out_not的高四位,将a的反放在out_not的低四位。
注意:
1.两个 N 位向量之间的按位运算复制向量的每个位的运算并产生 N 位输出。
2.逻辑运算将整个向量视为布尔值(真 = 非零,假 = 零)和产生 1 位输出。
3.“按位或”的符号:|
逻辑或的符号:||
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[2:0] = ~a;
assign out_not[5:3] = ~b;
2.2.5 Four-input gate
问题陈述:
构建一个具有四个输入的组合电路in[3:0]。
有3个输出:
out_and:4 输入与门的输出。
out_or:4 输入或门的输出。
out_xor:4 输入异或门的输出。
Verilog代码:
module top_module(
input [3:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and=∈
assign out_or=|in;
assign out_xor=^in;
endmodule
每日总结:
按位与逻辑运算
1.按位运算:
1)两个 N 位向量之间的按位运算复制向量的每个位的运算并产生 N 位输出。
2)位运算符
位运算符 | |
---|---|
~ | 取反 |
& | 按位与 |
I | 按位或 |
^ | 按位异或 |
^ ~ | 按位同或 |
2.逻辑运算:
1)逻辑运算将整个向量视为布尔值(真 = 非零,假 = 零)和产生 1 位输出。
2)逻辑运算符
逻辑运算符 | |
---|---|
&& | 逻辑与 |
II | 逻辑或 |
! | 逻辑非 |