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语句中赋值: 这个说明至关重 ...
随机推荐
- python 根据 数据库创建java 文件
#coding=utf-8 import pymysql import os import re # 包全路径 packagepath=r'E:\idea工程\dc-exam\dc-exam\src\ ...
- 初识 iOS 自动化测试框架 WebDriverAgent
微信跳一跳最近很火,外挂代练什么的也越来越多.作为一只程序猿,对外挂的原理产生了强烈的好奇心,于是埋头研究了一阶段,注意到了 WebDriverAgent 这套 Facebook 出品的自动化测试框架 ...
- c++ primer 中讲的顶层const 和 底层 const 理解
c++ primer 中讲的 顶层const 和 底层 const 以前没搞懂的顶层const和底层const,这次看了后感觉明白了. 首先,const是一个限定符,被它修饰的变量的值不能改 ...
- js中的内置对象
在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在调用属性和 ...
- Unable to instantiate receiver xxx.receiver.NetworkReceiver异常
Unable to instantiate xxxreceiver.NetworkReceiver: 这个异常是之前版本有NetworkReceiver(监听网络变化的),新的版本删除了Network ...
- python自学-day2(变量、if条件判断、运算符操作)
1.变量 变量只是用于保存内存位置,将变量存储在内存中的作用,方便后面调用,这意味着,在创建变量时会在内存中开辟一个空间. 变量命名规则: 由字母.数字.下划线(_)组成 不能以数字开头 不能使用 P ...
- 快速排序算法的实现 && 随机生成区间里的数 && O(n)找第k小 && O(nlogk)找前k大
思路:固定一个数,把这个数放到合法的位置,然后左边的数都是比它小,右边的数都是比它大 固定权值选的是第一个数,或者一个随机数 因为固定的是左端点,所以一开始需要在右端点开始,找一个小于权值的数,从左端 ...
- maya 安装不上
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- WSGI学习系列Pecan
Pecan Introduce Pecan是一个轻量级的基于Python的Web框架, Pecan的目标并不是要成为一个“full stack”的框架, 因此Pecan本身不支持类似Session和D ...
- Python 参数设置
1. 配置文件(ConfigParser模块) 1.1 ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.s ...