文章目录
Vectors
1.Vector0
module top_module (
input wire [2:0] vec,
output wire [2:0] outv,
output wire o2,
output wire o1,
output wire o0,);
assign outv = vec;
assign o0 = vec[0];
assign o1 = vec[1];
assign o2 = vec[2];
endmodule
2. Vector1
构建一个组合电路,将输入16位,分成低[7:0]和高[15:8]字节
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
3. Vector2
将32位向量视为包括4个字节。构建一个电路来反转4字节字的字节顺序。
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
4. Vector gates
构建一个具有三位输入的电路,用于计算两个向量的按位或,两个向量的逻辑或,以及两个向量的逆,将b的逆放在out_not的上半部分,将a的逆放在下部分。
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[5:3] = ~b;
assign out_not[2:0] = ~a;
endmodule
5. Gate4
创建一个有四个输入的组合电路,它们有三个输出:
1.out_and: 输出与门
2.out_or:输出或门
3.out_xor: 输出异或门
module top_module (
input [3:0] in,
output out_and,
output out_or,
output out_xor);
assign out_and = & in;
assign out_or = | in;
assign out_xor = ^ in;
endmodule
6. Vector3
连接运算符{a,b,c}用于通过连接向量的较小部门来创建较大的向量
//交换两个字节
assign out[15:0] = {in[7:0],in[15:8]};
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
7. Vectorr
给定一个8位输入向量[7:0],反转其位序。
module top_module(
input [7:0] in,
output [7:1] out);
integer i;
always@(*)begin
for(i=7;i>=0;i--)
begin
out[7-i] = in[i];
end
end
endmodule
8.Vector4
复制操作符允许重复一个向量并将它们连接在一起:{num{vector}}
module top_module (
input [7:0] in,
output [31:0] out);
assign out = {{24{in[7]}},in};
endmodule
9. Vector5
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