怎样用Verilog实现4选1数据选择器

如题所述

4选1数据选择器使用两位地址码A1A2产生4个地址信号,由A1A2等于“00”、“01”“10”“11”来选择输出。输入信号:4个数据源d0、d1、d2、d3。两位地址码a[1..0];使能端g。输出信号:输出选择则端y。

真值表如下:

程序代码:

module  mux4(y,d0,d1,d2,d3,g,a);

output y;

input d0,d1,d2,d3;

input g;

input [1:0] a;

wire notal,nota0,x1,x2,x3,x4;

not(notal,a[1]);

(notal,a[0]);

and (x1,d0,notal,nota0);

(x2,d1,notal,nota[0]);

(x3,d2,a[1],nota0);

(x4,d3,a[1],nota[0]);

or (y1,x1,x2,x3,x4);

and (y,y1,g);

endmodule

扩展资料

语言要素:

Verilog的设计初衷是成为一种基本语法与C语言相近的硬件描述语言。

这是因为C语言在Verilog设计之初,已经在许多领域得到广泛应用,C语言的许多语言要素已经被许多人习惯。一种与C语言相似的硬件描述语言,可以让电路设计人员更容易学习和接受。

不过,Verilog与C语言还是存在许多差别。另外,作为一种与普通计算机编程语言不同的硬件描述语言,它还具有一些独特的语言要素,例如向量形式的线网和寄存器、过程中的非阻塞赋值等。总的来说,具备C语言的设计人员将能够很快掌握Verilog硬件描述语言。

参考资料来源:《基于Quartus II 的数字系统VerilogHDL 设计实例详解》 周润景 苏良碧 编著

电子工业出版社  第5章 组合逻辑电路设计范例  5.3 数据选择器

参考资料来源:百度百科--数据选择器

参考资料来源:百度百科--Verilog HDL

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-16

module mux4_1(out,in0,in1,in2,in3,sel);

output out;

input in0,in1,in2,in3;

input[1:0] sel;

reg out;

always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表

case(sel)

2'b00: out=in0;

2'b01: out=in1;

2'b10: out=in2;

2'b11: out=in3;

default: out=2'bx;

endcase

endmodule

扩展资料:

注意事项

由于选择器使用条件触发的方法对应真值表进行匹配输出与输入,因此可以联想到在C程序设计中的条件语句“If”和“Case”两种。

Case语句下可能出现锁存器。注释case条件下的case语句块的某一行可以得到不完整的case语句下的2位四路选择器。由不完整case语句下的2位四路选择器可知:

由于case语句所有分支处于同一优先级,所以当条件不完整时,对于处理结果,它不取决于语句的先后顺序,只取决于待处理信号,而处理结果为与待处理信号相差1’b1的信号的处理结果,在这一条件下相当于与待处理信号相差1’b1的信号的处理结果得到了锁存,锁存器因此产生。

对与锁存器而言,锁存器在待处理信号存在Glitch的情况下,可能会对Glitch产生锁存,从而导致锁存出现严重错误,是目标信号处理结果与预期目的产生极大的偏差,因此锁存器存在不稳定因素,所以在使用锁存器时,要牢记优先消除待处理信号的Glitch。

本回答被网友采纳
第2个回答  2020-05-13

4选1数据选择器使用两位地址码A1A2生成4个地址信号,A1A2等于“00”、“01”“10““11”来选择输出。输入信号:四个数据源d0、d1、d2、d3。两位地址码a[1..0];使能端g。输出信号:输出选择则端y。

真值表如下:

程序代码:

modolemux4(y,d0,d1,d2,d3,g,a)

outputy

inputd0、d1、d2、d3

inputg

input[1:0]a

wirenotal,nota0,x1,x2,x3,x4

not(notal,a[1])

(notal,a[0])

and(x1,d0,notal,nota0)

(x2,d1,notal,nota[0])

(x3,d2,a[1],nota[0])

(x4,d3,a[1],nota[0])

or(y1、x1、x2、x3、x4)

and(y,y1,g)

endmodule

扩展资料:

语言元素:

Verilog是一种硬件描述语言,其基本语法类似于C语言。

1.这是因为C语言在Verilog设计之初就被广泛应用于许多领域。C语言的许多语言元素,已经被许多人使用。一种类似于C语言的硬件描述语言可以使电路设计者更容易地学习和接受。

2.但是Verilog和C语言有很多不同之处,另外,作为一种不同于一般计算机编程语言的硬件描述语言,Verilog也有一些独特的语言元素,如向量形式的行网和寄存器、进程中的非阻塞赋值等,使用C语言的设计师将能够掌握Verilog硬件描述语言。

参考资料来源:百度百科--数据选择器

本回答被网友采纳
第3个回答  推荐于2017-10-15
第一种方法
module mux(
d1,
d2,
d3,
d4,
se1,
se2,
dout
);
input d1;
input d2;
input d3;
input d4;
input se1;
input se2;

output dout;

reg dout;

always @ (d1 or d2 or d3 or d4 or se1 or se2)
case({se1,se2})
2'b00 : dout=d1;
2'b01 : dout=d2;
2'b10 : dout=d3;
2'b11 : dout=d4;
endcase
endmodule
第二种方法
module mux(
d1,
d2,
d3,
d4,
se1,
se2,
dout
);
input d1;
input d2;
input d3;
input d4;
input se1;
input se2;

output dout;

reg dout;

always @ (d1 or d2 or d3 or d4 or se1 or se2)
if (!se1)
begin
if (!se2)
dout = d1;
else
dout = d2;
end
else begin
if (!se2)
dout = d3;
else
dout = d4;
end

endmodule
第三种方法
module se(
d1,
d2,
d3,
d4,
se1,
se2,
dout
);
input d1;
input d2;
input d3;
input d4;
input se1;
input se2;

output dout;

reg dout;

always @ (d1 or d2 or d3 or d4 or se1 or se2)
assign dout=se1?se2?d4:d3:se2?d2:d1;
endmodule本回答被提问者采纳
第4个回答  2011-10-28
module mux4_1(out,in0,in1,in2,in3,sel);

output out;

input in0,in1,in2,in3;

input[1:0] sel;

reg out;

always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表

case(sel)

2'b00: out=in0;

2'b01: out=in1;

2'b10: out=in2;

2'b11: out=in3;

default: out=2'bx;

endcase

endmodule
相似回答