实验案例—编译码器

实例三 编译码器(基于Robei的实验案例)

2.3.1. 本章导读

通过设计简单的编译码器实现对数据的转换。常见的编码方式有格雷码,BCD码和8-3线编码器,16-4线编码器等。本次设计以8-3线优先编码和3-8线译码器作为例子,进行数据的编译码设计。
设计原理
优先编码器是将多个二进制输入压缩成更少数目输出的电路算法。优先编码器常用于处理最高优先级请求时控制中断请求。8-3线编码器是将输入为8比特的数据以3比特的方式描述出来。8根输入线路中每次只有一个线路为高电平,其余为低电平。相反,3-8译码器是用8根线对输入的3根线数据进行电平转换。如表2-3-1。
实验案例—编译码器

2.3.2. 设计流程

1. 编码器模型设计
(1)新建一个模型命名为encoder,类型为module,同时引脚设置为2输入1输出。每个引脚的属性和名称参照图2-3-1进行对应的修改。
实验案例—编译码器
(2)添加代码。点击模型下方的Code(如图2-3-3所示)添加代码。
实验案例—编译码器
在代码设计区内输入以下Verilog代码:
always @ (en or x)
begin
if (en)
begin
case (x)
8’b00000001 : y = 3’b000;
8’b00000010 : y = 3’b001;
8’b00000100 : y = 3’b010;
8’b00001000 : y = 3’b011;
8’b00010000 : y = 3’b100;
8’b00100000 : y = 3’b101;
8’b01000000 : y = 3’b110;
8’b10000000 : y = 3’b111;
default : y= 3’b000;
endcase
end
end
(3)保存。点击工具栏实验案例—编译码器图标,或者点击菜单“File”中的下拉菜单“Saveas”,将模型另存到一个文件夹中。
(4)运行。在工具栏点击实验案例—编译码器或者点击菜单“Build”的下拉菜单“Run”,执行代码检查。如果有错误,会在输出窗口中显示。
2. 译码器模型设计
(1)新建一个模型命名为decoder,类型为module,同时引脚设置为2输入1输出。每个引脚的属性和名称参照图2-3-4进行对应的修改。
实验案例—编译码器
(2)添加代码。点击模型下方的Code(如图2-3-6所示)添加代码。
实验案例—编译码器
在代码设计区内输入以下Verilog代码:
assign out = (en) ? (1 << din) : 8’b0;
(3)保存。点击工具栏 实验案例—编译码器图标,将模型存到与encoder相同的文件夹中。
(4)运行。在工具栏点击实验案例—编译码器执行代码检查。如果有错误,会在输出窗口中显示。
3. 测试文件设计
(1)新建一个2输入1输出的测试文件。点击工具栏上的实验案例—编译码器图标,在弹出的对话框中参照图2-3-7进行设计。
实验案例—编译码器
(2)修改各个引脚的颜色。选中每个引脚,在属性栏中对照图2-3-8进行修改引脚属性,并修改其颜色,方便区分不同的引脚信号。
实验案例—编译码器
(3)另存为测试文件。点击工具栏中的实验案例—编译码器图标,将测试文件保存到decoder和encoder模型所在的文件夹下。
(4)加入模型。在Toolbox工具箱的Current栏里,会出现一个decoder和encoder模型,单击该模型并在codertest上添加。点击工具栏中的实验案例—编译码器图标,连接引脚,如图2-3-9所示。
实验案例—编译码器
(5)输入激励。点击测试模块下方的“Code”,输入激励算法。激励代码在结束的时候要用$finish 结束。
initial begin
data=3’b000;
en=0;
#1 data=3’b000;
en=1;
#1 data=3’b001;
#1 data=3’b010;
#1 data=3’b011;
#1 data=3’b100;
#1 data=3’b101;
#1 data=3’b110;
#1 data=3’b111;
#1 data=3’b000;
#1 data=3’b001;
#1 $finish;
end
实验案例—编译码器
(6)执行仿真并查看波形。点击工具栏实验案例—编译码器,查看输出信息,检查没有错误之后点击实验案例—编译码器进行仿真,再点击实验案例—编译码器。在弹出的Waveform窗口上点击右侧Workspace中的信号,进行添加并查看,如图2-3-11所示。点击波形查看器工具栏上的实验案例—编译码器图标进行自动缩放。分析仿真结果并对照真值表,查看设计波形输入输出是否一致。
实验案例—编译码器

2.3.3. 问题与思考

(1)使用Robei设计一个BCD编码器并进行仿真测试。
(2)使用Robei设计一个16-4线编码器和4-16线译码器,并仿真测试。
(3)使用Robei设计一个格雷编码器并测试结果。