实验一:38译码器的VHDL实现及原理图实现

这篇具有很好参考价值的文章主要介绍了实验一:38译码器的VHDL实现及原理图实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、QUARTUS II的简单上手及基本操作

找了好多好多,感觉网上都不太人性化,所以自己记录了一下自己写的,还是有点意思的的,但是这前面的没啥意思,到后面连起来用的时候就有意思了!

1、项目的创建

1、File -> New Project Wizard38译码器原理图,VHDL记录,fpga开发38译码器原理图,VHDL记录,fpga开发38译码器原理图,VHDL记录,fpga开发38译码器原理图,VHDL记录,fpga开发
后面没有选择, 一路无脑下来,项目就已经安装好了!

2、两种方法实现38译码器
一、纯原理图法
1.1新建一个图形设计文件

38译码器原理图,VHDL记录,fpga开发

1.2 放置元器件

只要在如下区域双击,就可以开始放置元器件了!
38译码器原理图,VHDL记录,fpga开发38译码器原理图,VHDL记录,fpga开发基本上用得了的就是如下栏

1.3 主要使用到的元器件的种类
  1. NOT(可以直接用搜索框搜,没必要傻傻的找)
    38译码器原理图,VHDL记录,fpga开发
  2. AND
    38译码器原理图,VHDL记录,fpga开发
1.4 按图连线

38译码器原理图,VHDL记录,fpga开发

1.5 编译

38译码器原理图,VHDL记录,fpga开发
38译码器原理图,VHDL记录,fpga开发
显示这个就算成功了,然后可以先看下效果,就是仿真一下,看看是不是自己想要的结果

1.6 仿真

1.6.1 新建一个VWF文件

38译码器原理图,VHDL记录,fpga开发

1.6.2 设置仿真文件
38译码器原理图,VHDL记录,fpga开发

1.6.3 在in 端口设置输入波形信号

可以直接框选几栏,然后再工具栏设置高低电平

也可以框选几栏,然后双击,就可以设置这里的值
38译码器原理图,VHDL记录,fpga开发
小tips: 可以将这里的进制位改为十进制,因为可以看起来很方便(主要是懒得换算,输入一位就可以达到二进制四位的效果。)

设置成这样就可以了,表示1.2.3…

38译码器原理图,VHDL记录,fpga开发

1.6.4 开始仿真

会弹出一个新页面,显示出仿真波形。仿真就这样结束了,说明符合我们的预期
38译码器原理图,VHDL记录,fpga开发38译码器原理图,VHDL记录,fpga开发

1.7 设置引脚,准备下载!

Assignments->Pin Planner

38译码器原理图,VHDL记录,fpga开发
在这里输入对应的引脚号就行,然后直接退出

Tools->Programmer,下面对着书搞就行。(开发板不在身边,下不了程序)

总结一下
  1. 创建项目

  2. 创建图形设计文件

  3. 选择元器件

  4. 画图

  5. 编译

  6. 仿真

  7. 选择引脚

  8. 下载

    二、纯VHDL

    相同步骤省略,只关注VHDL

    2.1创建vhd文件

38译码器原理图,VHDL记录,fpga开发
g)]

小tips:看个人喜好,我喜欢用Notepad来代替quartus ii的编译

2.2 导入常用库

类似与c语言的Include 和python 中的import(一般无脑导入就行)

Library IEEE;
Use IEEE.STD_LOGIC_1164.all;
2.3 编写实体

实体,就是主要就是定义要使用的端口,注意,实体名称一定要和vhdl文件名称一样,否则报错

Entity sch38yimaqi_vhdl IS
    Port(input1:IN std_logic_vector (2 DOWNTO 0); 
        D:OUT std_logic_vector (7 DOWNTO 0));
End;
2.4 编写结构体

结构体的感觉更像是其他语言里面函数之类的感觉,就是去实现功能,这里一个并行就可以完成

ARCHITECTURE behave OF sch38yimaqi_vhdl IS
    BEGIN
    PROCESS(input1) --进程程序,程序顺序执行
    BEGIN
        CASE input1 IS
            WHEN "000" =>   D<="11111110";   -- 八位,当输入为000时,只有最后一位置0
            WHEN "001" =>   D<="11111101";
            WHEN "010" =>   D<="11111011";
            WHEN "011" =>   D<="11110111";
            WHEN "100" =>   D<="11101111";
            WHEN "101" =>   D<="11011111";
            WHEN "110" =>   D<="10111111";
            WHEN "111" =>   D<="01111111";
            WHEN OTHERS =>  D<="11111111";
        END CASE;
    END PROCESS;
END;

没有在学校的fpga的板子上试验过,如果运行不成功的话,应该只要修改一下逻辑值就够了,就是0 1 那些。

3、拓展题

1、 LED9-LED12全部灭掉,无非就是让led的那些端口全部置0(假如设置1 为亮的话),可以在定义端口的时候,直接给他们赋初值的时候就直接解决掉他们。

 D4:OUT std_logic_vector (3 DOWNTO 0):="0000");   -- 初始化D9-D12   置低点位,不亮。

2、添加使能端的问题,同样也是一样的,只要添加一个if的判断语句就可以解决

ARCHITECTURE behave OF sch38yimaqi_more IS
BEGIN
    PROCESS(input1) --进程程序,程序顺序执行
    BEGIN
        IF EN='1' THEN                           -- 当使能为1时,进行有效译码
            CASE input1 IS
                WHEN "111" =>   D<="00000001";   -- 八位,当输入为000时,只有最后一位置0    实验led亮为1   按键摁下为0
                WHEN "110" =>   D<="00000010";
                WHEN "101" =>   D<="00000100";
                WHEN "100" =>   D<="00001000";
                WHEN "011" =>   D<="00010000";
                WHEN "010" =>   D<="00100000";
                WHEN "001" =>   D<="01000000";
                WHEN "000" =>   D<="10000000";
                WHEN OTHERS =>  D<="00000000";
            END CASE;
        ELSIF EN='0' THEN                        -- 不需要译码时,使能端置0,全部输出低电平
            D<="00000000";
        END IF;
    END PROCESS; 
END;

3、流水灯的实现具体可以参考另外一篇,这里主要是有两种思路

第一种,就是用rol函数(就是沿着向量右移一位)

可以参考这个

PROCESS(tim)                                        -- 含有多个进程语句,都为并行执行
BEGIN
		IF(tim'event and tim = '1') THEN
            sta <= sta rol 1;
		END IF;
END PROCESS;

第二种是,直接连接向量的头,也可以达到移位的效果

	BEGIN
		IF(tim'event and tim = '1') THEN
			sta <= sta(6 DOWNTO 0) & sta(7);
		END IF;
	END PROCESS;

4、字太多了,不想看
完全代码如下文章来源地址https://www.toymoban.com/news/detail-782143.html

Library IEEE;
Use IEEE.STD_LOGIC_1164.all;
Entity sch38yimaqi_more IS
    Port(input1:IN std_logic_vector (2 DOWNTO 0); 
        EN:IN std_logic;
        D:OUT std_logic_vector (7 DOWNTO 0);
        D4:OUT std_logic_vector (3 DOWNTO 0):="0000");   -- 初始化D9-D12   置低点位,不亮。
End;
ARCHITECTURE behave OF sch38yimaqi_more IS
BEGIN
    PROCESS(input1) --进程程序,程序顺序执行
    BEGIN
        IF EN='1' THEN                           -- 当使能为1时,进行有效译码
            CASE input1 IS
                WHEN "111" =>   D<="00000001";   -- 八位,当输入为000时,只有最后一位置0    实验led亮为1   按键摁下为0
                WHEN "110" =>   D<="00000010";
                WHEN "101" =>   D<="00000100";
                WHEN "100" =>   D<="00001000";
                WHEN "011" =>   D<="00010000";
                WHEN "010" =>   D<="00100000";
                WHEN "001" =>   D<="01000000";
                WHEN "000" =>   D<="10000000";
                WHEN OTHERS =>  D<="00000000";
            END CASE;
        ELSIF EN='0' THEN                        -- 不需要译码时,使能端置0,全部输出低电平
            D<="00000000";
        END IF;
    END PROCESS; 
END;

到了这里,关于实验一:38译码器的VHDL实现及原理图实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3线8线译码器74LS138设计VHDL代码74138

    名称:3线8线译码器74LS138设计 软件:QuartusII 语言:VHDL 代码功能: 3线8线译码器74LS138的设计 使用VHDL代码 74138 演示视频:74LS1383线8线译码器74LS138设计 FPGA代码Verilog/VHDL代码资源下载网:www.hdlcode.com 代码下载: 74LS1383线8线译码器74LS138设计(代码在文末付费下载)软件:Quar

    2024年02月03日
    浏览(47)
  • FPGA数字电路设计:三八译码器的原理与实现

    FPGA数字电路设计:三八译码器的原理与实现 三八译码器是常用于数字电路设计中的一种重要元件。它的作用是将三位二进制信号转换成八个输出信号,通常用于地址解码、选通控制、状态指示等应用场景。 在FPGA数字电路设计中,三八译码器的实现需要借助Verilog HDL语言进行

    2024年02月08日
    浏览(44)
  • 实验二 译码器及其应用

    五、实验步骤与实验结果 法一:基于附件一代码实现74138功能 1、用VHDL设计38译码器。打开QuarterII新建一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:dianluecp1文件夹中,新建一个Verilog HDL文件,将附件一代码写入,运行无错误,进行引脚锁定(图1-1),重新运行,无误

    2023年04月17日
    浏览(38)
  • 实验二:译码器功能测试及应用

    实验目的与要求 : 目的: (1)了解和正确使用MSI组合逻辑部件; (2)掌握一般组合逻辑电路的特点及分析、设计方法; (3)学会对所设计的电路进行逻辑功能测试的方法; (4)察组合辑电路的竞争冒险现象。 要求: (1)复习组合逻辑电路的分析与设计方法; (2)根据任务要求设计电路,并

    2024年02月06日
    浏览(44)
  • EDA实验-----3-8译码器设计(QuartusII)

    目录 一. 实验目的 二. 实验仪器 三. 实验原理及内容 1.实验原理 2.实验内容 四.实验步骤 五. 实验报告 六. 注意事项  七. 实验过程 1.创建Verilog文件,写代码 ​编辑 2.波形仿真 3.连接电路图 4.烧录操作 学会Verilog HDL的case语句应用。 学会Verilog HDL的if语句应用。 学会使用Ver

    2024年02月05日
    浏览(52)
  • 138译码器的工作原理

    E1.E2.E3为三个使能输入端,其中E1和E2为低有效,E3为高有效,除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高; 当S1 = 0 或S2’ + S3’ = 1 时,译码器被禁止工作,当S1 = 1时,S2’+S3’ = 0 时,译码器处于工作状态。 A0,A1,A2为3位二进制加权地址输入端口,A2A1A0顺序组成

    2024年02月11日
    浏览(37)
  • 数字逻辑与部件设计基础实验——3-8译码器

    用连续值 或者always语句实现3-8译码器74138 了解3-8译码器的功能,锻炼根据功能表实现硬件功能的能力 熟悉上板操作的步骤和流程 74138的器件手册中的Function Tables: 用verilog语言在vivado环境下编写源文件,实现3-8译码器。经综合、实现、生成bitstream文件后,将bit文件下载到NE

    2024年02月02日
    浏览(35)
  • 计算机组成原理32位MIPS CPU设计实验(指令译码器电路设计 、时序发生器状态机设计、时序发生器输出函数、硬布线控制器)

    这次实验是32位MIPS CPU设计实验(单总线CPU-定长指令周期-3级时序),在头歌当中一共需要我们进行六道题的测试,分别为MIPS指令译码器设计,定长指令周期(时序发生FSM设计,时序发生器输出函数设计,硬布线控制器,单总线CPU设计),硬布线控制器组合逻辑单元。其中由于

    2024年02月02日
    浏览(38)
  • Verilog实现 3-8译码器

    拨码开关 LED(低电平有效) 000 11111110 001 11111101 010 11111011 011 11110111 100 11101111 101 11011111 110 10111111 111 01111111 Quartus 联合 Modelsim仿真的相关设置如下: 成功运行的情况应该是会在这个界面 接下来介绍一些常用的按钮(菜单) 经过检查波形图,可以确认是符合我们的预期

    2024年02月08日
    浏览(41)
  • FPGA二四译码器设计及实现

    FPGA二四译码器设计及实现 在数字电路中,二进制的计数方式广泛应用于各种场合。然而,当我们需要控制多个开关或LED时,手动进行二进制转换并不是一种好的选择。因此,在这种情况下,二进制译码器就显得尤为重要。 二四译码器是一种将两个输入字线转换为四个输出字

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包