学过数电应该都知道有38译码器这个东西
就是通过3个输入端,控制8个输出端的状态。2.^3正好是8位。
下面附上代码:

//ujs-lili
module my3_8(a,b,c,out);input a,b,c;output [7:0]out;//表示位宽为8bit的输出信号reg [7:0]out;//或者直接output reg [7:0]out;always@(a,b,c) //这个跟vhdl中的process类似,a,b,c是敏感变量,只有有变化,就会执行always块中的内容begincase({a,b,c}) //注意case里边是{},这个和vhdl中的&相类似,原来a,b,c是bit,现在是合起来3bit3'b000: out = 8'b0000_0001;3'b001: out = 8'b0000_0010;3'b010: out = 8'b0000_0100;3'b011: out = 8'b0000_1000; //always中的数必须是reg(寄存器)定义的,如果没有reg out那句话,就会报错。3'b100: out = 8'b0001_0000;  //Procedural assignment to a non-register out is not permitted, left-hand side3'b101: out = 8'b0010_0000;3'b110: out = 8'b0100_0000;3'b111:  out = 8'b1000_0000;endcaseend
endmodule

这个程序很简单,但是从中能学到几点:
1.这个程序一开始报错,主要是always中的变量一定要是reg型的。
2.用{ }可以把几个bit的变量合成一个

下面做一个ise的仿真:

//ujs-lili
`timescale 1ns / 1ps //1ns是单位,1ps是精度
module my3_8_tb;// Inputsreg a;reg b;//激励信号reg c;// Outputswire [7:0] out; //输出信号。// Instantiate the Unit Under Test (UUT)my3_8 uut (.a(a), //信号和端口的连接.b(b), .c(c), .out(out));initial begin// Initialize Inputsa = 0;b = 0;c = 0;// Wait 100 ns for global reset to finish#100;a = 0;b = 0;c = 0;#100;a = 0;b = 0;c = 1;#100;a = 0;b = 1;c = 0;#100;a = 0;b = 1;c = 1;#100;a = 1;b = 0;c = 0;#100;a = 1;b = 0;c = 1;#100;a = 1;b = 1;c = 0;#100;a = 1;b = 1;c = 1;#100;$stop;// Add stimulus hereend
endmodule

那么这个仿真自己输入的仅仅是initial begin那段:其他都是ise自己给的。
最终得到仿真波形:
同样的,用vhdl也可以写这样的程序:

--ujs-lili
entity my3_8 is
port(a,b,c:in std_logic;key_out:out std_logic_vector(7 downto 0));
end my3_8;
architecture Behavioral of my3_8 is
beginprocess(a,b,c)variable d :std_logic_vector(2 downto 0);begind := a&b&c;case (d) iswhen "000" => key_out <= "00000000" ;when "001" => key_out <= "00000010" ;when "010" => key_out <= "00000100" ;when "011" => key_out <= "00001000" ;when "100" => key_out <= "00010000" ;when "101" => key_out <= "00100000" ;when "110" => key_out <= "01000000" ;when "111" => key_out <= "10000000" ;when others => null;end case ;end process;
end Behavioral;

这个程序很简单,但是有过报错:
1.when others => null; 没有写,少掉了=>
2.d是一个变量,所有:=
3.end process后边的;
4.其实可以更简单,直接把a,b,c定义成d in std_logic_vecrtor(2 downto 0)
仿真程序:

--ujs-lili
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--USE ieee.numeric_std.ALL;
ENTITY my3_8_tb IS
END my3_8_tb;
ARCHITECTURE behavior OF my3_8_tb IS -- Component Declaration for the Unit Under Test (UUT)COMPONENT my3_8PORT(a : IN  std_logic;b : IN  std_logic;c : IN  std_logic;key_out : OUT  std_logic_vector(7 downto 0));END COMPONENT;--Inputssignal a : std_logic := '0';signal b : std_logic := '0';signal c : std_logic := '0';--Outputssignal key_out : std_logic_vector(7 downto 0);-- No clocks detected in port list. Replace <clock> below with -- appropriate port name
BEGIN -- Instantiate the Unit Under Test (UUT)uut: my3_8 PORT MAP (a => a,b => b,c => c,key_out => key_out);processbegina <= '0';b <= '0';c <= '0';
wait for 100 ns;a <= '0';b <= '0';c <= '1';
wait for 100 ns;a <= '0';b <= '1';c <= '0';
wait for 100 ns;a <= '0';b <= '1';c <= '1';
wait for 100 ns;a <= '1';b <= '0';c <= '0';wait for 100 ns;a <= '1';b <= '0';c <= '1';
wait for 100 ns;a <= '1';b <= '1';c <= '0';
wait for 100 ns;a <= '1';b <= '1';c <= '1';
wait for 100 ns;  end process;
END;

最后的结果和Verilog的一样:

Verilog入门2-用ise做38译码器和仿真相关推荐

  1. Verilog快速入门(13)—— 用3-8译码器实现全减器

    Verilog快速入门 (1) 四选一多路器 (2)异步复位的串联T触发器 (3)奇偶校验 (4)移位运算与乘法 (5)位拆分与运算 (6)使用子模块实现三输入数的大小比较 (7)4位数值比较器电路 ...

  2. (147)Verilog编程:使用3-8译码器实现全减器

    (147)Verilog编程:使用3-8译码器实现全减器 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Verilog编程:使用3-8译码器实现全减器: 5)结束语. ...

  3. 记录使用Spartan-6 FPGA进行一次3-8译码器实验

    之前仔细的记录过一次PWM蜂鸣器的实验,见博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制,这里就不再仔细的写下全过程了,因为都是一样的过程,只记录一下做这个小实验的思路即可. 3-8译码器 ...

  4. 【杭电数电实验】verilog入门指北

    verilog入门指北 前言 指北内容 面向人群 基础实验 1-15 代码参考 正文 ISE 的安装 实验的基本操作流程 可能出现的问题 创建工程闪退 希望删除某一文件,实际上并没有删除 如何编写测试 ...

  5. python自学视频教程 38-python编程开发入门中文视频培训教程38讲

    Python 当前位置:主页 > 编程教程 > Python > python编程开发入门中文视频培训教程38讲 python编程开发入门中文视频培训教程38讲 教程大小:   发布 ...

  6. 学习笔记——3-8译码器实例(FPGA)

    一.3-8译码器简介 1.简介 译码是编码的逆过程.其功能是将具有特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路称为译码器.如果有n个二进制选择线,则最多可译码转换成2n个数据. ...

  7. fpga组合逻辑(4位比较器、8-3优先编码器、38译码器实现全减器、数据选择器实现逻辑函数等)

    目录 组合逻辑 VL11 4位数值比较器电路 VL12 4bit超前进位加法器电路 VL13 优先编码器电路① VL14 用优先编码器①实现键盘编码电路 VL15 优先编码器Ⅰ VL16 使用8线-3 ...

  8. 38译码器数码管c语言代码,38译码器驱动数码管电路图

    使用38译码器来驱动数码管来节省IO端口 (1)什么是38译码器? 38译码器有3个输入端口A.B.C和8个输出端口Y0-Y7.由输入端口控制输出端口的值 (2)为什么要使用38译码器 回想之前的驱动 ...

  9. Verilog HDL语言设计实现过程赋值+译码器

    完成课本例题6.11.6.12,进行综合和仿真(功能仿真),查看综合和仿真结果,整理入实验报告. 6.11 module shiyan21(in,clk,out1,out2); input clk,i ...

  10. 3-8 译码器设计实验--VHDL

    一.实验目的 (1)学习并掌握Quartus II的使用方法 (2)学习使用原理图方法进行逻辑设计输入,并初步了解可编程器件设计的全过程 (3)熟悉ALTERA公司EDA设计工具软件Quartusll ...

最新文章

  1. php中mkdir()函数的权限问题
  2. 【JETSON-NANO】SD卡系统备份克隆
  3. Java 防抖动函数的实现
  4. 构建之法 阅读笔记01
  5. 探索javascript----获得节点计算后样式
  6. 使用 gitlab 进行代码管理
  7. php 过滤微信符号昵称,PHP方法处理微信昵称特殊符号过滤
  8. 什么舱位_把“订舱位”说成book warehouse position,外企不会要你
  9. php和会计,财务跟会计有什么区别
  10. 查看网络情况netstat指令与动态监控top指令
  11. TOMCAT报错解决
  12. 力荐 | 台大林轩田《机器学习基石》资源汇总
  13. VS编程之查看数组信息
  14. linux安装键盘鼠标失灵,在archlinux安装界面这卡住了,鼠标键盘失灵
  15. 胡侃学习(理论)计算机-From 南大小百合
  16. vue+drf没公网ip接入支付宝功能
  17. vim三种工作模式 命令模式、编辑模式、末行(底行)模式
  18. 【Basis】狄利克雷分布
  19. [译] 现代浏览器内部揭秘(第一部分)
  20. 2020-03-12-脑电分析之线性与非线性变换

热门文章

  1. [openssl]centos version ‘libcrypto.so.10‘ not found
  2. 安装thrift遇到Error: libcrypto required
  3. Linux系统下查看网卡相关数据
  4. px upx 和rpx
  5. 关于a标签下载的相关坑
  6. 果园机器人的写作思路_《果园机器人》教材理解
  7. 智能电子秤全国产化电子元件推荐方案
  8. Nginx基本配置参数说明与文档
  9. 高斯整数matlab,Matlab---自适应高斯核
  10. nodejs安装教程Windows版本