#设计一个4位输入1位输出的组合逻辑电路,输入为8421BCD码,当输入为大于3的奇数时,输出为1,否则输出0。
(1)列出真值表
(2)画出卡诺图并化简,写出最简逻辑函数表达式
(3)画出电路图
(4)用verilog描述上述电路,并编写用于仿真的测试模块。
#
真值表和卡诺图画出来后得到了f=s0,是不是错了呀?这样怎么设计电路图和verilog呢
#设计一个4位输入1位输出的组合逻辑电路,输入为8421BCD码,当输入为大于3的奇数时,输出为1,否则输出0。
(1)列出真值表
(2)画出卡诺图并化简,写出最简逻辑函数表达式
(3)画出电路图
(4)用verilog描述上述电路,并编写用于仿真的测试模块。
#
(1)首先根据题目所述,我们可以列出真值表如下:
A | B | C | D | F |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 1 |
0 | 1 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
(2)根据真值表,我们可以绘制卡诺图,并进行化简。
因此,最简逻辑函数表达式为 F = A’C + AC’D’。
(3)我们可以基于最简逻辑函数表达式,绘制对应的电路图如下:
graph LR;
A((A))--|NOT|B;
B((B))--|AND|D1;
C((C))--|AND|D1;
D((D))--|NOT|E;
A--|AND|E1;
B--|AND|E1;
E1--|OR|D1;
C--|AND|F1;
D--|AND|F1;
E--|AND|F1;
F1--|OR|D1;
D1--|OUT|F
(4)根据电路图,我们可以编写如下的Verilog模块:
module circuit(
input [3:0] ABCD,
output reg F
);
// Write your code here
always@(ABCD)
begin
case({ABCD[3],ABCD[2],ABCD[1],ABCD[0]})
4'b0000: F = 1'b0;
4'b0001: F = 1'b0;
4'b0010: F = 1'b0;
4'b0011: F = 1'b1;
4'b0100: F = 1'b0;
4'b0101: F = 1'b1;
4'b0110: F = 1'b0;
4'b0111: F = 1'b1;
4'b1000: F = 1'b0;
4'b1001: F = 1'b1;
4'b1010: F = 1'b0;
4'b1011: F = 1'b1;
4'b1100: F = 1'b1;
4'b1101: F = 1'b1;
4'b1110: F = 1'b1;
4'b1111: F = 1'b1;
default: F = 1'bx;
endcase
end
endmodule
同时,为了添加必要的提示,我们可以在问题内容中说明一些关键词和概念的含义,如 "输入是8421BCD码"、"组合逻辑电路"、"真值表"、"卡诺图"、"最简逻辑函数表达式" 等。并且我们可以在回答中添加注释和说明,以方便Chat GPT准确理解我们的回答。