设计一个判决器,它支持8个人表决,每个人的表决采用10分制,表决平均<阈值(6分)为不合格,>=8为优秀,6~8之间为合格。 判决器端口定义如下: module decider (output[1:0] result, //0:不合格; 1:合格; 2:优秀 input [7:0] in1, input [7:0] in2, input [7:0] in3, input [7:0] in4, input [7:0] in5, input [7:0] in6, input [7:0]
时间: 2024-03-09 16:50:12 浏览: 16
in7, input [7:0] in8, input [3:0] threshold);
其中,threshold 是一个二进制数,用来表示阈值。
设计思路:
1. 定义一个变量 sum,用来统计所有人的投票总分;
2. 根据 threshold,计算出合格、不合格和优秀的分数线;
3. 在一个 for 循环中,将每个人的投票分数加入 sum 中;
4. 根据 sum 和分数线,判断最终结果,并将结果输出到 result 中。
下面是代码实现:
```
module decider (output[1:0] result, //0:不合格; 1:合格; 2:优秀
input [7:0] in1,
input [7:0] in2,
input [7:0] in3,
input [7:0] in4,
input [7:0] in5,
input [7:0] in6,
input [7:0] in7,
input [7:0] in8,
input [3:0] threshold);
reg [7:0] sum;
reg [7:0] pass_score;
reg [7:0] excellent_score;
always @(*) begin
sum = in1 + in2 + in3 + in4 + in5 + in6 + in7 + in8;
pass_score = threshold * 2;
excellent_score = threshold * 2 + 2;
end
always @(sum, pass_score, excellent_score) begin
if (sum >= excellent_score) begin
result = 2; //优秀
end else if (sum >= pass_score) begin
result = 1; //合格
end else begin
result = 0; //不合格
end
end
endmodule
```
使用示例:
```
module test_decider;
reg [7:0] in1 = 8;
reg [7:0] in2 = 6;
reg [7:0] in3 = 9;
reg [7:0] in4 = 7;
reg [7:0] in5 = 8;
reg [7:0] in6 = 7;
reg [7:0] in7 = 8;
reg [7:0] in8 = 9;
reg [3:0] threshold = 6;
wire [1:0] result;
decider d(result, in1, in2, in3, in4, in5, in6, in7, in8, threshold);
initial begin
$monitor("Result: %d", result);
end
endmodule
```
输出结果:
```
Result: 2
```
说明投票结果为优秀。