草庐IT

FPGA设计编程(二) 8-3线优先编码器与3-8线译码器

timerring 2023-04-21 原文

目录

【实验要求】 

【实验软件工具】

【实验一】设计一个8-3线优先编码器(74LS148)

1. 实验内容与原理说明

 2. 实验模块程序代码和激励代码

(1)设计模块代码

(2)激励模块代码

3. 波形仿真图

4.门级电路图

【实验二】设计一个3-8线译码器(74LS138)

1. 实验内容与原理说明

 2. 实验模块程序代码和激励代码

(1)设计模块代码

(2)激励模块代码

3. 波形仿真图

4.门级电路图

【实验结果分析及思考】


【实验要求】 

  1. 实验内容与原理说明(包括框图、逻辑表达式和真值表)。
  2. 实验模块程序代码(设计模块Design Block)和激励代码(激励模块Test Bench)。
  3. 仿真波形图。
  4. 综合得到的门级电路图。
  5. 实验结果分析及思考。
  6. 每一次报告用Word文档提交,文件名:姓名_班级_第几次实验_学号。

【实验软件工具】

  1. QuartusII;
  2. ModelSim SE.

【实验一】设计一个8-3线优先编码器(74LS148)

1. 实验内容与原理说明

实验一为设计一个8-3线优先编码器,即可以将八个输入的编码,通过对于输入信号的分析,输出第几个信号是低电平。8线-3线优先编码器有8个输入端I0'~I7',低电平为输入有效电平;有3个输出端Y0'~Y2’,低电平为输出有效电平。此外,为了便于电路的扩展和使用的灵活,还设置有使能端S'、选通输出端Ys'和扩展端Yex'.

其所对应的情况如下:

IN

OUT

01111111

111

 10111111   

110

11011111

101

11101111

100

11110111

011

11111011

010

11111101

001

11111110

000

Else

000

该设计模块的实验框图如下:

根据8-3线优先编码器可以列出其真值表如下:

 2. 实验模块程序代码和激励代码

(1)设计模块代码

module Encoder83(IN, EI, GS, EO, OUT);  
      input [7:0] IN;    
      input EI;   
      output [2:0] OUT;   
      output GS;    
      output EO;   
      reg [2:0] OUT;  
      reg GS, EO;  
      always @(IN or EI)  
          if(EI) begin OUT <= 3'b111; GS <= 1; EO <= 1; end   
         else if (IN[7] == 0) begin OUT <= 3'b000; GS <= 0; EO <= 1; end  
         else if (IN[6] == 0) begin OUT <= 3'b001; GS <= 0; EO <= 1; end  
         else if (IN[5] == 0) begin OUT <= 3'b010; GS <= 0; EO <= 1; end  
         else if (IN[4] == 0) begin OUT <= 3'b011; GS <= 0; EO <= 1; end  
         else if (IN[3] == 0) begin OUT <= 3'b100; GS <= 0; EO <= 1; end  
         else if (IN[2] == 0) begin OUT <= 3'b101; GS <= 0; EO <= 1; end  
         else if (IN[1] == 0) begin OUT <= 3'b110; GS <= 0; EO <= 1; end  
         else if (IN[0] == 0) begin OUT <= 3'b111; GS <= 0; EO <= 1; end  
         else if (IN == 8'b11111111) begin OUT <= 3'b111; GS <= 1; EO <= 0; end  
         else begin OUT <= 3'b111; GS <= 1; EO <= 1; end    
 endmodule

(2)激励模块代码

// Verilog Test Bench template for design : Encoder83  
//   
// Simulation tool : ModelSim (Verilog)  
//   
  
  
`timescale 1 ps/ 1 ps  
  module Encoder83_vlg_tst();  
      reg EI;  
      reg [7:0] IN;  
      wire EO;  
      wire GS;  
      wire [2:0] OUT;  
      Encoder83  i1 (.EI(EI), .EO(EO), .GS(GS), .IN(IN), .OUT(OUT));  
      initial                                                  
         begin                                                    
             EI = 1;  
             IN = 8'b11111111;  
             #10 EI = 0;  
             #10 IN = 8'b01010101;  
             #10 IN = 8'b10101010;   
             #10 IN = 8'b11010101;  
             #10 IN = 8'b11101010;  
             #10 IN = 8'b11110101;  
             #10 IN = 8'b11111010;  
             #10 IN = 8'b11111101;  
             #10 IN = 8'b11111110;  
             #10 IN = 8'b11111111;            
         end                        
 endmodule 

3. 波形仿真图

4.门级电路图

【实验二】设计一个3-8线译码器(74LS138)

1. 实验内容与原理说明

实验二为设计一个3-8线译码器。74LS138译码器的逻辑电路图和真值表如下所示,输出为低电平有效。从74LS138译码器的逻辑电路图可以看出,它具有三个附加的控制端G1、G2A、和G2B。当G1=1、G2A+G2B=0的时候,译码器将处在译码工作状态;否则译码器将被禁止,所有的输出端将被封锁在高电平,如真值表所示。实际上,这三个输出端也可叫做“片选”输入端,利用片选的作用可以将多片74LS138译码器连接起来以扩展译码器的功能,例如用两片74LS138可以连接成一个四线—十六线译码器。即将输入的三位二进制数根据一定的准则进行译码,输出八位二进制数,所代表的一位输出是高电平,其他的输出为低电平。

其封装后的实验框图如下所示:

  对应74LS138译码器的真值表如下所示:

 2. 实验模块程序代码和激励代码

(1)设计模块代码

module Decoder38(OUT,IN);  
input [2:0]IN;  
output reg [7:0]OUT;  
always@(IN)  
begin  
case(IN)  
3'b000:OUT=8'b1111_1110;  
3'b001:OUT=8'b1111_1101;  
3'b010:OUT=8'b1111_1011;  
3'b011:OUT=8'b1111_0111;  
3'b100:OUT=8'b1110_1111;  
3'b101:OUT=8'b1101_1111;  
3'b110:OUT=8'b1011_1111;  
3'b111:OUT=8'b0111_1111;  
default:OUT=8'b1111_1111;  
endcase  
end  
endmodule 

(2)激励模块代码

// Verilog Test Bench template for design : Decoder38  
//   
// Simulation tool : ModelSim (Verilog)  
//   
  
`timescale 1 ps/ 1 ps  
module Decoder38_vlg_tst();  
reg eachvec;  
reg [2:0] IN;  
wire [7:0]  OUT;  
                         
Decoder38 i1 (  
// port map - connection between master ports and signals/registers     
    .IN(IN),  
    .OUT(OUT)  
);  
initial                                                  
begin                                                                                                   
   IN=3'b000;    
#5 IN=3'b001;   
#5 IN=3'b010;   
#5 IN=3'b011;   
#5 IN=3'b100;   
#5 IN=3'b101;    
#5 IN=3'b110;                 
#5 IN=3'b111;                                      
end  
endmodule

3. 波形仿真图

4.门级电路图

【实验结果分析及思考】

本次实验主要设计8-3线优先编码器与3-8线译码器,这让我复习到了数电中所学过的相关知识,对于优先编码器74LS148是带有扩展功能的8-3线优先编码器,它有8个信号输入端,3个二进制码输出端,一个输入使能端,一个选通输出端和一个扩展端。使能端为“0”时,该芯片被选中,否则不被选中。选通输出端和扩展端主要用于功能扩展。,普通的二进制编码器要求在任意时刻仅能由一个输入端有效,当同时有两个或更多输入信号有效时,输出将会变得混乱,因此普通的编码器会收到一定的限制,为了克服这种限制提出了优先编码器。优先编码器允许多个输入信号同时有效,但它只对其中优先级别最高的有效输入信号编码,对级别低的输入信号则无视。3-8线译码器则是当一个选通端(S0)为高电平,另两个选通端((/S1))和(/S2))为低电平时,可将地址端(A0、A1、A2)的二进制编码在 Y0 至 Y7 对应的输出端以低电平译出。(即输出为 Y0 至 Y7 的非)比如:A2A1A0=110 时,则 Y6 输出端输出低电平信号。

综上,本次实验在参考部分书上讲解之后,自己采用行为描述的方法,不同于书上的casez和for的实现,我采用了if和else的进行了编码尝试,最终效果良好,此次实验相较于上次实验,我对于软件的使用较为熟练,在编写激励模块代码时考虑的也更为周到,但是设计的细节还需要进一步地练习与精进。

相关参考资源已上传:

山东大学FPGA实验参考与实验报告报告二组合逻辑实验编码器和译码器设计-嵌入式文档类资源-CSDN下载山东大学FPGA实验参考与实验报告报告二组合逻辑实验编码器和译码器设计更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/m0_52316372/85900894

有关FPGA设计编程(二) 8-3线优先编码器与3-8线译码器的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  5. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  6. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  7. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  8. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  9. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  10. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

随机推荐