为组合逻辑电路编写一个verilog模块
发布网友
发布时间:2023-07-11 05:13
我来回答
共1个回答
热心网友
时间:2024-10-29 02:24
//该逻辑函数具有用于表示0-63整数的6个输入位N5-N0
//和用于指示是否是3或5的整数倍的两个输出M3和M5。
mole multi_3_5 (N5,N4,N3,N2,N1,N0,M3,M5);
input N5;
input N4;
input N3;
input N2;
input N1;
input N0;
output M3;
output M5;
reg M3,M5;
always @ * begin
case ({N5,N4,N3,N2,N1,N0}) begin
// 3倍的分支
6'b00_0000, // 如果0倍不算 就注释掉这一行
6'b00_0011, //3
6'b00_0110, //6
6'b00_1001, //9
6'b00_1010, //12
6'b00_1111, //15
6'b01_0010, //16+3
6'b01_0101, //16+5
6'b01_1000, //16+8
6'b01_1011, //16+11
6'b01_1110, //16+14
6'b10_0001, //32+1
6'b10_0100, //32+4
6'b10_0111, //32+7
6'b10_1010, //32+10
6'b10_1101, //32+13
6'b11_0000, //32+16
6'b11_0011, //48+3
6'b11_0110, //48+6
6'b11_1001, //48+9
6'b11_1100, //48+12
6'b11_1111 //48+15
: begin
M3 = 1'b1;
M5 = 1'b0;
end
//5倍的分支
6'b00_0000, // 如果0倍不算 就注释掉这一行
6'b00_0101, //5
6'b00_1010, //10
6'b00_1111, //15
6'b01_0100, //20
6'b01_1001, //25
6'b01_1110, //30
6'b10_0011, //35
6'b10_1000, //40
6'b10_1101, //45
6'b11_0010, //50
6'b11_0111, //55
6'b11_1100 //60
: begin
M3 = 1'b0;
M5 = 1'b1;
end
default:
M3 = 1'b0;
M5 = 1'b0;
endcase
end // end always
endmole
根据这个再去优化吧
做硬件倍乘判断好像会比较吃力,所以这样写虽然代码不简洁,综合完了以后还是有好处,逻辑也会更简单