以下题目不具有难易程度的连续性
1、三人表决电路
本关需要你根据所学的组合逻辑及数字电路的知识完成三人表决电路的设计,实现少数服从多数的表决规则,根据逻辑真值表和逻辑表达式完成表决功能。
运用Verilog HDL进行设计,完善三人表决电路的功能描述风格代码,具备组合逻辑电路的设计仿真和测试的能力。
相关知识
逻辑原理
三人表决电路中, 当表决某个提案时,多数人同意,则提案通过;同时有一个人具有否决权。若全票否决,也给出显示。
设输入为 A、 B、 C,且 A 具有否决权。同意用1 表示,不同意用 0 表示;输出 X 为 1 时表示提案通过; Y 为 1 时表示提案全票否决。 则三人表决电路的真值表如下表所示。
三人表决器真值表
编程要求
根据真值表,在右侧编辑器完善模块设计代码,你编写的程序要能根据不同的输入完成三人表决功能。
测试说明
以下是测试样例:
module JG3(ABC,X,Y);
//input Port(s)
input [2:0] ABC;
//output Port(s)
output X, Y;
reg X, Y;
//Additional Module Item(s)
always@(ABC)
// 请在下面添加代码,实现满足三人表决器真值表;
/********** Begin *********/
case(ABC)
3'B000:begin X<=1'B0;Y<=1'B1;end //一开始写的 3'B000: X<=0;Y<=1;一直不通过,可能环境要求不同。
3'B001:begin X<=1'B0;Y<=1'B0;end
3'B010:begin X<=1'B0;Y<=1'B0;end
3'B011:begin X<=1'B0;Y<=1'B0;end
3'B100:begin X<=1'B0;Y<=1'B0;end
3'B101:begin X<=1'B1;Y<=1'B0;end
3'B110:begin X<=1'B1;Y<=1'B0;end
3'B111:begin X<=1'B1;Y<=1'B0;end
endcase
/********** End *********/
endmodule
2、多路选择器
任务描述
本关需要你设计一个 2 选 1 多路选择器。进一步熟悉 Verilog HDL 设计流程,组合电路的设计和测试。
相关知识
逻辑原理
在数字信号的传输过程中,有时需要从多路输入数据中选出某一路数据,完成此功能的逻辑器件称为数据选择器,即所谓多路开关,简称 MUX (Multiplexer)。2 选 1 多路选择器能在选择信号的控制下,从 2 路输入信号中选择其中的一路数据送到输出口。其真值表如下表所示。
多路选择真值表
编程要求
为了完成判断学生成绩等级的任务,你编写的程序要能根据s输入的值给出相应y输出的值,满足多路选择器的真值表
测试说明
以下是测试样例:
module mux21(a,b,s,y);
input a,b,s;
output y;
reg y;
always @(a,b,s)
// 请在下面添加代码,实现当选择信号S为0时选中a,为1时选中b;
/********** Begin *********/
case(s)
0:begin y<=a;end
1:begin y<=b;end
endcase
/********** End *********/
endmodule
3、电路功能描述—门级原始结构
实验目的
熟悉用Verilog HDL描述电路模块功能的基本方法,掌握门级原始结构的使用方法。
实验任务
用门级原始结构的方式描述2选1多路选择器,在右侧代码窗格中补充完成相应的代码并完成测试。
相关知识
逻辑电路的结构化定义
Verilog包含了一系列与通用逻辑门电路对应的门级原始结构,一个逻辑门可以通过定义其函数名、输入和输出来表示。门级原始结构可以用于定义较大规模的电路。
门级原始结构又称门实例化 gate instantiation,语法如下:
gate_name inst_name;
例如,一个2输入与门,其输出为y,输入为x1和x2,则该与门可以表示为:
and( y, x1, x2 );
一个3输入或门,可以定义为:
or( y, x1, x2, x3 );
一个3输入异或门,可以定义为:
xor( y, x1, x2, x3 );
表1 Verilog门
代码:
module mux_gate_struc(x1, x2, s, f);
input x1, x2, s;
output f;
not (k, s);
/**************** begin of blank1***********************/
//请补充完成相应的门级原始结构描述
or( f, g, h);
and(g, x1, k);and(h, s, x2);
/****************end of blank1***********************/
endmodule
4、电路功能描述—行为定义—连续赋值
实验目的
熟悉用Verilog HDL描述电路模块功能的基本方法,掌握连续赋值的使用方法。
实验任务
用连续赋值的方式描述2选1多路选择器,在右侧代码窗格中补充完成相应的代码并完成测试。
相关知识
逻辑电路的行为定义
在设计大规模电路时,使用门级原始结构会很繁琐。可行的选择是采用更为抽象的表达式和编程结构描述逻辑电路的行为。
用逻辑表达式定义电路
上图所示的选择器可用如下逻辑代数表达式表示:
在Verilog中,与、或、非运算分别用 &、|、~ 表示,使用关键词assign对f进行连续赋值,如下:
assign f = (~s & x1)|(s & x2 );
assign语句是并行语句,语法形式如下:
assign net_assignment{,net_assignment};
用过程语句定义电路
使用过程语句定义电路是更高层次的抽象,过程语句要放在相应的编程结构中。该知识点放在下一个关卡中进行详细讲解。
测试说明
请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试!
以下是测试用例:
省略
代码:
module mux_assign_behav(x1, x2, s, f);
input x1, x2, s;
output f;
/**********begin of blank1**************/
//请用连续赋值方式描述2选1多路选择器
assign f = (~s&x1) | (s&x2);
/**********end of blank1**************/
endmodule
5、电路功能描述—行为定义—过程语句
实验目的
熟悉用Verilog HDL描述电路模块功能的基本方法,掌握always编程结构和过程语句if - else 的使用方法。
实验任务
用always结构和if - else语句描述2选1多路选择器,在右侧代码窗格中补充完成相应的代码并完成测试。
相关知识
逻辑电路的行为定义
在设计大规模电路时,使用门级原始结构会很繁琐。可行的选择是采用更为抽象的表达式和编程结构描述逻辑电路的行为。
用逻辑表达式定义电路
见上一关。
用过程语句定义电路
使用过程语句定义电路是更高层次的抽象,过程语句要放在相应的编程结构中。
上图所示的选择器电路可以表述成:如果s=0,则f=x1;如果s=1,则f=x2。在Verilog中,这种功能可以用if-else语句定义,如下:
if(s)
f=x2;
else
f=x1;
Verilog要求过程语句必须包含在always块结构中,语法如下:
always @(sensitivity_list)
[begin]
[procedural assignment statements] //过程赋值语句
[if-else statements] //if-else语句
[case statements] //case语句
[while, repeat, and for loops] //循环语句
[task and function calls] //任务和函数调用
[end]
几点说明:
1.敏感信号列表中的信号用逗号,或者or分隔;
2.always块中的输出信号必须定义成寄存器型reg;
3.always块中的语句顺序执行;
4.一个Verilog模块中可以包含多个always块;
5.一整个always块可以看成是一个并行语句。
特别说明:
门级原始结构、连续赋值、过程语句与编程结构这三种功能描述风格不是孤立,可以在一个module中同时出现。
测试说明
请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试!
以下是测试用例:省略
代码:
module mux_proc_behav(x1, x2, s, f);
input x1, x2, s, f;
output f;
/****************begin of blank1***********/
//请将输出信号定义为寄存器型
reg f;
/****************end of blank1***********/
/****************begin of blank2***********/
always@(s, x1, x2)//请补充完成敏感信号列表
/****************end of blank2***********/
/****************begin of blank3***********/
//请用过程语句if-else描述2选1多路选择器
if(s)
f = x2;
else
f = x1;
/****************end of blank3***********/
endmodule