Verilog八线 - 三线优先编码器设计(74LS148)
if语句法
//8线-3线优先编码器设计(74LS148)
//
//EI | A7 A6 A5 A4 A3 A2 A1 A0 | Y2 Y1 Y0 GS EO
//0 | 0 x x x x x x x | 0 0 0 0 1
//0 | 1 0 x x x x x x | 0 0 1 0 1
//0 | 1 1 0 x x x x x | 0 1 0 0 1
//0 | 1 1 1 0 x x x x | 0 1 1 0 1
//0 | 1 1 1 1 0 x x x | 1 0 0 0 1
//0 | 1 1 1 1 1 0 x x | 1 0 1 0 1
//0 | 1 1 1 1 1 1 0 x | 1 1 0 0 1
//0 | 1 1 1 1 1 1 1 0 | 1 1 1 0 1
//0 | 1 1 1 1 1 1 1 1 | 1 1 1 1 0
//1 | x x x x x x x x | 1 1 1 1 1 module encoder_83 (din, EI, GS, EO, dout);
input [:] din; //编码输入端data_in,低电平有效
input EI; //使能输入端EI(选通输入端),EI为 0 时芯片工作,即允许编码
output [:] dout; //编码输出端data_out
output GS; //片优先编码输出端,优先编码器工作工作状态标志GS,低电平有效
output EO; //使能输出端EO(选通输出端)
reg [:] dout;
reg GS, EO;
always @(din or EI)
if(EI) begin dout <= 'b111; GS <= 1; EO <= 1; end //所有输出端被锁存在高电平
else if (din[] == ) begin dout <= 'b000; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b001; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b010; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b011; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b100; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b101; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b110; GS <= 0; EO <= 1; end
else if (din[] == ) begin dout <= 'b111; GS <= 0; EO <= 1; end
else if (din == 'b11111111) begin dout <= 3'b111; GS <= ; EO <= ; end //芯片工作,但无编码输入
else begin dout <= 'b111; GS <= 1; EO <= 1; end //消除锁存器(latch)
endmodule //EI = 0 表示允许编码,否则所有输出端被封锁在高电平(控制芯片工作)
//EO = 0 表示电路工作,但无编码输入(用于级联)
//GS = 0 表示电路工作,且有编码输入(判断输入端是否有输入)

testbench:
`timescale ps/ ps
module encoder_83_vlg_tst();
reg EI;
reg [:] din;
wire EO;
wire GS;
wire [:] dout;
encoder_83 i1 (.EI(EI), .EO(EO), .GS(GS), .din(din), .dout(dout));
initial
begin
EI = ;
din = 'b11111111;
# EI = ;
# din = 'b01010101;
# din = 'b10101010;
# din = 'b11010101;
# din = 'b11101010;
# din = 'b11110101;
# din = 'b11111010;
# din = 'b11111101;
# din = 'b11111110;
# din = 'b11111111;
end
endmodule


case语句法
//8线-3线优先编码器设计(74LS148)
//
//EI | A7 A6 A5 A4 A3 A2 A1 A0 | Y2 Y1 Y0 GS EO
//0 | 0 x x x x x x x | 0 0 0 0 1
//0 | 1 0 x x x x x x | 0 0 1 0 1
//0 | 1 1 0 x x x x x | 0 1 0 0 1
//0 | 1 1 1 0 x x x x | 0 1 1 0 1
//0 | 1 1 1 1 0 x x x | 1 0 0 0 1
//0 | 1 1 1 1 1 0 x x | 1 0 1 0 1
//0 | 1 1 1 1 1 1 0 x | 1 1 0 0 1
//0 | 1 1 1 1 1 1 1 0 | 1 1 1 0 1
//0 | 1 1 1 1 1 1 1 1 | 1 1 1 1 0
//1 | x x x x x x x x | 1 1 1 1 1 module encoder_83_case (din, EI, GS, EO, dout);
input [:] din; //编码输入端data_in,低电平有效
input EI; //使能输入端EI(选通输入端),EI为 0 时芯片工作,即允许编码
output [:] dout; //编码输出端data_out
output GS; //片优先编码输出端,优先编码器工作工作状态标志GS,低电平有效
output EO; //使能输出端EO(选通输出端)
reg [:] dout;
reg GS, EO;
always @(din or EI)
if(EI)
begin dout <= 'b111; GS <= 1; EO <= 1; end //所有输出端被锁存在高电平
else
casez (din) //建议用casez语句,casez把z/?匹配成任意。 casex把z/?/x匹配成任意,x为仿真初态
'b0??????? : begin dout <= 3'b000; GS <= ; EO <= ; end //无关项建议用?表示,?是高阻态的另一种表示。?,z,Z是等价的
'b10?????? : begin dout <= 3'b001; GS <= ; EO <= ; end
'b110????? : begin dout <= 3'b010; GS <= ; EO <= ; end
'b1110???? : begin dout <= 3'b011; GS <= ; EO <= ; end
'b11110??? : begin dout <= 3'b100; GS <= ; EO <= ; end
'b111110?? : begin dout <= 3'b101; GS <= ; EO <= ; end
'b1111110? : begin dout <= 3'b110; GS <= ; EO <= ; end
'b11111110 : begin dout <= 3'b111; GS <= ; EO <= ; end
'b11111111 : begin dout <= 3'b111; GS <= ; EO <= ; end //芯片工作,但无编码输入
default : begin dout <= 'b111; GS <= 1; EO <= 1; end //消除锁存器(latch)
endcase
endmodule //EI = 0 表示允许编码,否则所有输出端被封锁在高电平(控制芯片工作)
//EO = 0 表示电路工作,但无编码输入(用于级联)
//GS = 0 表示电路工作,且有编码输入(判断输入端是否有输入)


如有错误还请指出,如有侵权还请告知,如需转载请注明出处!
本人博客:http://www.cnblogs.com/yllinux/
Verilog八线 - 三线优先编码器设计(74LS148)的更多相关文章
- 基于Verilog HDL 的数字时钟设计
基于Verilog HDL的数字时钟设计 一.实验内容: 利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...
- 从YouTube改版看“移动优先”——8个移动优先网站设计案例赏析
2011年,Luke Wroblewski大神提出了移动优先的设计理念.在当时看来这无疑是一个打破行业常规的新型设计原则.而在移动互联网大行其道的今天,谁遵守移动优先的设计理念,设计出最好的移动端网站 ...
- 『TensorFlow』降噪自编码器设计
背景简介 TensorFlow实现讲解 设计新思路: 1.使用类来记录整个网络: 使用_init_()属性来记录 网络超参数 & 网络框架 & 训练过程 使用一个隐式方法初始化网络参数 ...
- 『TensorFlow』单&双隐藏层自编码器设计
计算图设计 很简单的实践, 多了个隐藏层 没有上节的高斯噪声 网络写法由上节的面向对象改为了函数式编程, 其他没有特别需要注意的,实现如下: import numpy as np import mat ...
- 吴裕雄 PYTHON 神经网络——TENSORFLOW 双隐藏层自编码器设计处理MNIST手写数字数据集并使用TENSORBORD描绘神经网络数据2
import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data os.envi ...
- 吴裕雄 PYTHON 神经网络——TENSORFLOW 单隐藏层自编码器设计处理MNIST手写数字数据集并使用TensorBord描绘神经网络数据
import os import numpy as np import tensorflow as tf import matplotlib.pyplot as plt from tensorflow ...
- 8-3编码器,3-8译码器的verilog实现
在数字系统中,由于采用二进制运算处理数据,因此通常将信息变成若干位二进制代码.在逻辑电路中,信号都是以高,低电平的形式输出.编码器:实现编码的数字电路,把输入的每个高低电平信号编成一组对应的二进制代码 ...
- Verilog设计技巧实例及实现
Verilog设计技巧实例及实现 1 引言 最近在刷HDLBits的过程中学习了一些Verilog的设计技巧,在这里予以整理.部分操作可能降低代码的可读性和Debug的难度,请大家根据实际情况进行使用 ...
- Verilog HDL 使用规范(一)
本博文参考:<大规模逻辑设计指导书>,对于写出规范的代码,培养良好的代码风格颇有裨益. wire and register 一个reg变量只能在一个always语句中赋值: 这个说明至关重 ...
随机推荐
- pandas学习3(数据处理)
- lvs 中DR模式负载均衡及keepalived
lvs DR配置 LVS负载均衡:三种负载均衡模式:DR,TUN(ip隧道),NAT,这里我们介绍DR模式 server1: 首先,配置server机yum源 方便后期实验流畅vim /etc/yum ...
- 技巧:Ubuntu踩坑记之网络配置哪里找
今天在虚拟机中遇到一个关于网络配置的坑,在此记录下来. 我们都知道虚拟机系统(此处指的是vmware)中,虚拟网络主要由三个方式实现: 桥接网络 NAT转换 主机共享网络 在这三种方式下,一般我们使用 ...
- C++二维数组的动态声明
int **a = new int* [m] //分配一个指针数组,将其首地址保存在a中 . for(int i = 0; i < m; i++) //为指针数组的每个元素分配一 ...
- linux下重启php服务
有时候修改了一些php配置或者进程满了需要重启php [root@snoopy :: bin]# service php-fpm restart Gracefully shutting down ph ...
- UGUI 用脚本动态改变Button颜色组合
public Button button; void Start() { ColorBlock cb = new ColorBlock(); cb.normalColor = Color.red; c ...
- Unity 游戏对象的组件列表
描述: 1 个游戏对象,上面有 4 个组件, 如图: 脚本 Test_01 的内容,如下: using System.Collections; using System.Collections.Gen ...
- MATLAB矩阵操作和算术运算符
矩阵的表示 矩阵之间用空格或者是逗号间隔 矩阵可以拼接(可以用矩阵拼接) 实部矩阵和虚部矩阵构成复数矩阵,一一对应. 冒号表达式: 格式: e1:e2:e3 e1表示初始值 e2表示步长 e ...
- ThreadLocal 开启事务
1.ThreadLocal该类提供了线程局部变量 2.分析原理: ThreadLocal内部有一个Map.Map的key是当前线程对象,value是一个Object对象. 模拟该类: public c ...
- SQL命令行操作
命令行操作(mysql.exe) 0.登录 : mysql -u root -p 1.显示数据库列表: show databases; 2.选择数据库: ...