三输入,一输出,输入信号有两个以上高电平则输出为高电平
真值表法:
module desciption_realdata(a, b, c, out);
input a, b, c;
output out;
reg out;
always @(a, b, c)
case ({a, b, c})
3'b000: out <= 0;
3'b001: out <= 0;
3'b010: out <= 0;
3'b011: out <= 1;
3'b100: out <= 0;
3'b101: out <= 1;
3'b110: out <= 1;
3'b111: out <= 1;
endcase
endmodule
逻辑代数法:
module description_logic(a, b, c, out);
input a, b, c;
output out;
assign out = (a & b) | (b & c) | (a & c);
endmodule
结构描述法:
module description_structure(a, b, c, out);
input a, b, c;
output out;
wire w1, w2, w3;
and a1(w1, a, b);
and a2(w2, c, b);
and a3(w3, a, c);
assign out = w1 | w2 | w3;
endmodule
抽象法:
module description_abstract(a, b, c, out);
input a, b, c;
output out;
reg [1:0]sum;
reg out;
always @(a, b, c)
begin
sum = a + b + c;
if(sum >= 2'b10) out = 1;
else out = 0;
end
endmodule
目前理解:在输入信号个数增加的时候,真值表法代码量太大,最简便的写法是逻辑代数法,只要写出逻辑代数表达式,然后连续赋值语句赋值即可,抽象法虽简单,但是必须联想到用到加法器和数字比较器,在编程硬件过程中一定得时刻想象对应电路,从电路角度出发写代码,而不是一味地顶级编程而把综合的过程丢给EDA完成。
欢迎评论!