在上一个实验中,通过FPGA板子实现了一个二选一选择器,野火的教程虽然出现了结果,但是感觉不是很符合底层原理,于是自己翻阅了相关资料。
module mux2_1
(
input wire [0:0] in_1,
input wire in_2,
input wire sel,
output reg out
);
always@(*)
if(sel==1'b1)
out =in_1;
else
out =in_2;
endmodule
这个是野火的例程代码,感觉代码很精简。
但是,我翻阅了“数字系统设计教程(第3版)”这本书,发现还有其他写法。
如图,为普通二选一多路选择器,输出out和输入a,b的关系,由sl决定的。当sl为低电平时,与a相同,当sl为高电平时,与b相同。人们并不关心它的电路结构,关心的是如何从逻辑上实现它。
module muxtwo(out,a,b,sel)
input a,b,sel;
output out;
reg out;
always @(sl or a or b)
if (! sl) out=a;
else out=b;
endmodule
如图,为带有与非门的二选一多路选择器。
module muxtwo(out,a,b,sl);
input a,b,sel;
output out;
wire nsl,sela,selb;
assign nsl=~sl;
assign sela=a&nsl;
assign selb=b&sl;
assign out=sela|selb;
endmodule
module muxtwo(out,a,b,sl);
input a,b,sl;
output out;
not u1(nsl,sl);
and #1 u2(sela,a,sl);
and #1 u3(selb,b,sl);
or #1 u4(out,sela,selb);
endmodule