‘壹’ eda设计正负脉宽数控调制信号发生器
本书以掌握国内外最流行的电子设计自动化(EDA)技术为教学目标,以
培养学生的设计和应用开发能力为主线,系统地介绍EDA应用技术。
全书在取材和编排上,内容新颖、循序渐进,并注重理论联系实际。全
书共10章,主要内容包括VHDL硬件描述语言、Quartus Ⅱ等EDA工具软件、
可编程逻辑器件、实验开发系统、应用实例和综合设计实例。第4章对大量
常规的数字电路做出了VHDL描述,第7章详细阐述了9个典型数字系统的设计
方法,第9章选取了16个实验实例,第10章给出了4个代表性的全国大学生电
子设计竞赛赛题设计实例。读者完全可以通过这些实际操作,很好地掌握:
EDA的开发设计方法。每章后面附有小结和习题,便于读者学习和教学使用
。为方便教师教学,本书配有电子教案。
本书可作为高职高专及本科院校电子信息、电气、通信、自动控制、自
动化和计算机类专业的EDA技术教材,也可作为上述学科或相关学科工程技
术人员的参考书。还可作为电子产品制作、科技创新实践、EDA课程设计和
毕业设计等实践活动的指导书。
【本书目录】
第1章 EDA技术概述
1.1 EDA技术及其发展
1.1.1 EDA技术的涵义
1.1.2 EDA技术的发展史
1.2 EDA设计流程
1.3 EDA技术的主要内容及主要的EDA厂商
1.3.1 EDA技术的主要内容
1.3.2 主要EDA厂商概述
1.4 常用的EDA工具
1.5 EDA技术的发展趋势
1.5.1 可编程器件的发展趋势
1.5.2 软件开发工具的发展趋势
1.5.3 输入方式的发展趋势
1.6 EDA技术的应用
1.6.1 EDA技术的应用形式
1.6.2 EDA技术的应用场合
本章小结
思考题和习题
第2章 VHDL硬件描述语言
2.1 VHDL概述
2.1.1 常用硬件描述语言简介
2.1.2 VHDL及其优点
2.1.3 VHDL程序设计约定
2.1.4 VHDL程序设计举例
2.2 VHDL程序基本结构
2.2.1 实体
2.2.2 结构体
2.2.3 库
2.2.4 程序包
2.2.5 配置
2.3 VHDL语言要素
2.3.1 VHDL文字规则
2.3.2 VHDL数据对象
2.3.3 VHDL数据类型
2.3.4 运算操作符
2.3.5 VHDL语言结构体的描述方式
2.4 VHDL顺序语句
2.4.1 等待语句和断言语句
2.4.2 赋值语句
2.4.3 转向控制语句
2.4.4 子程序调用语句
2.4.5 返回语句
2.5 VHDL并行语句
2.5.1 进程语句
2.5.2 块语句
2.5.3 并行信号赋值语句
2.5.4 并行过程调用语句
2.5.5 元件例化语句
2.5.6 生成语句
本章小结
思考题和习题
第3章 Quartus Ⅱ软件及其应用
3.1 Quartus Ⅱ的使用及设计流程
3.1.1 Quartus Ⅱ的图形编辑输入法
3.1.2 Quartus Ⅱ的文本编辑输入法
3.2 Quartus Ⅱ设计正弦信号发生器
3.2.1 创建工程和编辑设计文件
3.2.2 编译
3.2.3 正弦信号数据ROM定制
3.2.4 仿真
3.2.5 测试
3.2.6 配置器件
3.3 MATLAB/DSP Builder设计可控正弦信号发生器
3.3.1 建立设计模型
3.3.2 Simulink模型仿真
3.3.3 SignalCompiler编译
3.3.4 使用Quartus Ⅱ实现时序仿真
3.3.5 使用Quartus Ⅱ进行硬件测试
与硬件实现
本章小结
思考题和习题
第4章VHDL应用实例
4.1 组合逻辑电路设计
4.1.1 基本门电路
4.1.2 译码器
4.1.3 编码器
4.1.4 数值比较器
4.1.5 数据选择器
4.1.6 算术运算电路
4.1.7 三态门及总线缓冲器
4.2 时序逻辑电路设计
4.2.1 时钟信号和复位信号
4.2.2 触发器
4.2.3 寄存器和移位寄存器
4.2.4 计数器
4.2.5 序列信号发生器和检测器
4.3 存储器设计
4.3.1 只读存储器ROM
4.3.2 随机存储器RAM
4.4 状态机设计
4.4.1 摩尔型状态机
4.4.2 米立型状态机
本章小结
思考题和习题
第5章 大规模可编程逻辑器件
5.1 可编程逻辑器件概述
5.2 简单可编程逻辑器件
5.3 复杂可编程逻辑器件
5.3.1 CPLD的基本结构
5.3.2 Altera公司的器件
5.4 现场可编程门阵列
5.4.1 FPGA的整体结构
5.4.2 Xilinx公司的’FPGA器件
5.4.3 FPGA的配置
5.5 在系统可编程逻辑器件
5.5.1 ispLsI/pLSI的结构
5.5.2 Lattice公司ispLSI系列器件
5.6 FPGA和CPI。D的开发应用选择
5.6.1 FPGA和CPL|D的性能比较
5.6.2 FPGA和CPLD的开发应用选择
本章小结
思考题和习题
第6章 常用印A工具软件
6.1 Altera MAX+plus Ⅱ的使用
6.1.1 MAX+plus Ⅱ功能简介
6.1.2 MAX+plus Ⅱ设计流程
6.1.3 MAX+plus Ⅱ设计举例
6.2 Xilinx Foundation的使用
6.2.1 Foundation设计流程
6.2.2.Foundation设计举例
6.3 ModelSim的使用
6.3.1 ModelSim的使用方法
6.3.2 ModelSim与MAX-+Iplus Ⅱ的接口
6.3.3 ModelSim交互命令方式仿真
6.3.4 ModelSim批处理工作方式。
本章小结
思考题和习题
第7章 EDA技术综合设计应用
7.1 数字闹钟的设计
7.1.1 系统的设计要求
7.1.2 系统的总体设计
7.1.3 闹钟控制器的设计
7.1.4 译码器的设计
7.1.5 键盘缓冲器(预置寄存器)的设计
7.1.6 闹钟寄存器的设计
7.1.7 时间计数器的设计
7.1.8 显示驱动器的设计
7.1.9 分频器的设计
7.1.10 系统的整体组装
7.1.11 系统的硬件验证
7.2 多功能信号发生器的设计
7.2.1 设计要求
7.2.2 设计实现
7.2.3 系统仿真
7.3 序列检测器的设计
7.3.1 设计思路
7.3.2 VHDL程序实现
7.3.3 硬件逻辑验证
7.4 交通灯信号控制器的设计
7.4.1 设计思路
7.4.2 VHDL程序实现
7.4.3 硬件逻辑验证
7.5 空调系统有限状态自动机的设计
7.5.1 设计思路
7.5.2 VHDL程序实现
7.6 电梯控制系统的设计
7.6.1 设计要求
7.6.2 设计实现
7.6.3 系统仿真
7.7 步进电机控制电路的设计
7.7.1 步进电机的工作原理
7.7.2 驱动电路的组成及VHDL实现
7.8 智力竞赛抢答器的设计
7.8.1 设计思路
7.8.2 VHDL程序实现
7.9 单片机与FPGA/CPLD总线接口的设计
7.9.1 设计思路
7.9.2 VHDL程序实现
本章小结
思考题和习题
第8章 EDA实验开发系统
8.1 GW48型EDA实验开发系统原理与使用
8.1.1 系统性能及使用注意事项
8.1.2 系统工作原理
8.1.3 系统主板结构与使用方法
8.2 GW48实验电路结构图
8.2.1 实验电路信号资源符号图说明
8.2.2各实验电路结构图特点与适用范围简述
8.3 GW48系统结构图信号名与芯片引脚对照表
8.4 GWDVP?B电子设计竞赛应用板 使用说明
8.5 GW48型EDA实验开发系统使用实例
本章小结
思考题和习题
第9章 EDA技术实验
实验1 8位全加器的设计
实验2 组合逻辑电路的设计
实验3 触发器功能的模拟实现
实验4 计数器的设计
实验5 计数译码显示电路
实验6 数字钟综合实验
实验7 序列检测器的设计
实验8 简易彩灯控制器
实验9 正负脉宽数控调制信号发生器的设计
实验10 数字秒表的设计
实验11 交通灯信号控制器的设计
实验12 模拟信号检测
实验13 4位十进制频率计设计
实验14 VGA显示器彩条信号发生设计
实验15 A/D转换控制器的设计
实验16 音乐发生器的设计
第10章 EDA技术在全国大学生电子设计竞赛中的应用
10.1 等精度频率计设计
10.1.l 系统设计要求
10.1.2 系统组成
10.1.3 工作原理
10.1.4 FPGA开发的VHDL设计
10.1.5 系统仿真
10.1.6 系统测试与硬件验证
10.1.7 设计技巧分析及系统扩展思路
10.2 测相仪设计
10.2.1 测相仪工作原理及实现
10.2.2 系统测试
10.3 基于DDS的数字移相正弦信号发生器设计
10.3.1 系统设计要求
10.3.2 系统设计方案
10.3.3 DDS内部主要模块的VHDL程序实现
10.3.4 系统仿真与硬件验证
10.3.5 设计技巧分析与系统扩展思路
10.4 逻辑分析仪设计
10.4.1 设计任务
lO.4.2 设计基本要求
10.4.3 设计实现
‘贰’ eda实验怎样进行功能仿真,需要步骤
我一般使用Quartus II自带的仿真器仿真,方法如下:
(1)新建一个.vwf文件,并将其设为仿真激励:菜单Assignments->Settings,在左侧选择Simulation Settings,选择这里的.vwf文件
(2)设置为功能仿真:菜单Assignments->Settings,在左侧选择Simulation Settings,设置为Functional Simulation
(3)生成功能仿真网表:菜单Processing->Generate Functional Simulation Netlist
(4)开始仿真:菜单Processing->Start Simulation
‘叁’ EDA课程设计,用VHDL编程做出租车计费器
课程设计内容与要求
1,用开关按键表示脉冲,每个脉冲代表100米,10个脉冲1公里,每公里1.4元,能同步显示里程和费用;
2,低于2公里5元计费,高于2公里总费用=起步费用+(里程-2公里)*里程单价+
等候时间*等后单价;
3,等候时间大于2分钟,按每分钟1.3元计费;
4,可以设定起步价和里程单价。
一、设计原理与技术方法:
包括:电路工作原理分析与原理图、元器件选择与参数计算、电路调试方法与结果说明;
软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。
根据设计要求,系统的输入信号clk,计价开始信号start,等待信号stop,里程脉冲信号fin。系统的输出信号有:总费用数C0—c3,行驶距离k0—k1,等待时间m0—m1等。系统有两个脉冲输入信号clk_750k,fin,其中clk_750k将根据设计要求分频成14hz,15hz和1hz分别作为公里计费和超时计费的脉冲。两个控制输入开关start,stop;控制过程为:start作为计费开始的开关,当start为高电平时,系统开始根据输入的情况计费。当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;如需停车等待,就把stop变为高电平,
并去除fin输入脉冲,进行等待计费;当乘客下车且不等待时,直接将start置为0,系统停止工作;价格开始归为起步价5.0元。
整个设计由分频模块,计量模块,计费模块,控制模块和显示模块五个部分组成。
其中计量模块是整个系统实现里程计数和时间计数的重要部分;控制模块是实现不同计费方式的选择部分,根据所设计的使能端选择是根据里程计费还是根据等待时间计费,同时设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。计量模块采用1hz的驱动信号,计费模块采用14hz,13hz的驱动信号;计量模块每计数一次,计量模块就实现14次或者13次计数,即为实现计时的1.3元/min,计程时的1.4元/km的收费。组成框图如下所示:
1.百进制模块:
实现百米脉冲的驱动信号,元件框图如图3所示:
图3 百进制模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jin is
port(start,clk2: in std_logic; --秒脉冲
a: out std_logic_vector(3 downto 0));
end jin;
architecture rt1 of jin is
signal count_1:std_logic_vector(3 downto 0);
begin
a<=count_1;
process(start,clk2)
begin
if(start='0')then
count_1<="0000";
elsif(clk2'event and clk2='1')then
if(count_1="0111")then
count_1<="0000";
else
count_1<=count_1+'1';
end if;
end if;
end process;
end rt1
2.计费模块
; 实现里程和等候时间的计费并输出到显示,元件框图4如下:
图4 计费模块框图
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --计费驱动信号
start:in std_logic; --计费开始信号
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt1 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步价5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000";
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt1;
3.公里模块
实现历程的计数和输出计费脉冲,元件框图5如下:
图5 公里模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity gongli is
port(clk1,start: in std_logic; --百米脉冲
k1,k2,k3,k4: out std_logic_vector(3 downto 0); --里程显示
temp2 : out std_logic);
end gongli;
architecture rt1 of gongli is
signal count_1: std_logic_vector(3 downto 0);
signal count_2: std_logic_vector(3 downto 0);
signal count_3: std_logic_vector(3 downto 0);
signal count_4: std_logic_vector(3 downto 0);
begin
k1<=count_1;
k2<=count_2;
k3<=count_3;
k4<=count_4;
process(start,clk1)
begin
if(start='0')then
count_1<="0000";
count_2<="0000";
count_3<="0000";
count_4<="0000"; ---公里清零
elsif(clk1'event and clk1='1')then
if(count_1="1001")then --公里计数器
count_1<="0000";count_2<=count_2+1;temp2<='1';
if(count_2="1001")then
count_2<="0000";count_3<=count_3+'1';
if(count_3="1001")then
count_3<="0000";count_4<=count_4+'1';
end if;
end if;
else
count_1<=count_1+'1';temp2<='0';
end if;
end if;
end process;
end rt1;
4.输出模块
实现所有数据的输出,元件框图6如下:
图6 输出模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity shuchu is
port(y: in std_logic_vector(3 downto 0);
e: out std_logic_vector(6 downto 0));
end shuchu;
architecture rt1of shuchu is
begin
process
begin
case y is
when"0000"=>e<="0111111";
when"0001"=>e<="0000110";
when"0010"=>e<="1011011";
when"0011"=>e<="1001111";
when"0100"=>e<="1100110";
when"0101"=>e<="1101101";
when"0110"=>e<="1111101";
when"0111"=>e<="0000111";
when"1000"=>e<="1111111";
when"1001"=>e<="1100111";
when others=>e<="0000000";
end case;
end process;
end rt1;
5.显示模块
实现所有数据的显示,元件框图7如下:
图7 显示模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity xianshi is
port(start: in std_logic;
a:in std_logic_vector(3 downto 0); --选择信号
c1,c2,c3,c4,out1,out2,out3,out4:in std_logic_vector(3 downto 0); --里程显示,时间显示输入
y:out std_logic_vector(3 downto 0)); --里程显示,时间显示输出
end xianshi;
architecture rt1 of xianshi is
begin
process
begin
if(start='0')then
y<="0000";
else case a is
when "0000"=> y<=c1 ;
when "0001"=> y<=c2 ;
when "0010"=> y<=c3 ;
when "0011"=> y<=c4 ;
when "0100"=> y<=out1 ;
when "0101"=> y<=out2;
when "0110"=> y<=out3 ;
when "0111"=> y<=out4;
when others =>y<= "0000";
end case;
end if;
end process;
end rt1;
6.dian模块
图8 dian模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dian is
port(a: in std_logic_vector(3 downto 0);
e: out std_logic);
end dian;
architecture rt1 of dian is
begin
process
begin
case a is
when "0001"=>e<='1';
when "0101"=>e<='1';
when others=>e<='0';
end case;
end process;
end rt1;
三、中各个模块设计分析
系统总体顶层框图如下:
系统总体顶层框图
程序最终功能实现波形仿真
1. 分频模块
由于实验箱上没有14hz和13hz的整数倍时钟信号,因此采用频率较大的750khz进行分频,以近似得到14hz,13hz和1hz的时钟频率。通过以上三种不同频率的脉冲信号实行出租车行驶,等待两种情况下的不同计费。模块元件如下:
分频模块框图
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity fenpin is
port(clk_750k:in std_logic; --系统时钟
clk_14:buffer std_logic; --14分频
clk_13:buffer std_logic; --13分频
clk_1 : buffer std_logic); --1分频
end fenpin ;
architecture rt1 of fenpin is
signal q_14:integer range 0 to 53570; --定义中间信号量
signal q_13:integer range 0 to 57691;
signal q_1:integer range 0 to 749999;
begin
process(clk_750k)
begin
If(clk_750k' event and clk_750k='1')then
If q_14=53570 then q_14<=0;clk_14<=not clk_14;
else q_14<=q_14+1;
end if; --得14hz频率信号
If q_13=57691 then q_13<=0;clk_13<=not clk_13;
else q_13<=q_13+1;
end if; --得13hz频率信号
If q_1=749999 then q_1<=0;clk_1<=not clk_1;
else q_1<=q_1+1;
end if; --得1hz频率信号
end if;
end process;
end rt1;
2. 计量模块
计量模块主要完成计时和计程功能。
计时部分:计算乘客的等待累积时间,当等待时间大于2min时,本模块中en1使能信号变为1;当clk1每来一个上升沿,计时器就自增1,计时器的量程为59min,满量程后自动归零。
计程部分:计算乘客所行驶的公里数,当行驶里程大于2km时,本模块中en0使能信号变为1;当clk每来一个上升沿,计程器就自增1,计程器的量程为99km,满量程后自动归零。
元件框图为:
计量模块框图
计量模块仿真波形为:
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity jiliang is
port(start:in std_logic; --计费开始信号
fin:in std_logic; --里程脉冲信号
stop:in std_logic; --行驶中途等待信号
clk1:in std_logic; --驱动脉冲
en1,en0:buffer std_logic; --计费单价使能信号
k1,k0:buffer std_logic_vector(3 downto 0); --行驶公里计数
m1,m0:buffer std_logic_vector(3 downto 0)); --等待时间计数
end jiliang;
architecture rt2 of jiliang is
signal w:integer range 0 to 59; --计时范围0~59
begin
process(clk1)
begin
if(clk1'event and clk1='1')then
if start='0' then
w<=0;en1<='0';en0<='0';m1<="0000";
m0<="0000";k1<="0000";k0<="0000";
elsif stop='1' then --计时开始信号
if w=59 then
w<=0;
else w<=w+1;
end if;
if m0="1001" then
m0<="0000";
if m1="0101" then
m1<="0000";
else m1<=m1+1;
end if;
else m0<=m0+1;
end if;
if stop='1' then en0<='0';
if m1&m0>"00000001" then en1<='1'; --若等待时间大于2min则en1置1
else en1<='0';
end if;
end if;
elsif fin='1' then --里程计数开始
if k0="1001" then k0<="0000";
if k1="1001" then k1<="0000"; --计程范围0~99
else k1<=k1+1;
end if;
else k0<=k0+1;
end if;
if stop='0' then
en1<='0';
if k1&k0>"00000001" then
en0<='1'; --若行使里程大于2km,则en0置1
else en0<='0';
end if;
end if;
end if;
end if;
end process;
end rt2;
3. 控制模块
本模块主要是通过计量模块产生的两个不同的输入使能信号en0,en1,对每个分频模块输出的14hz,13hz的脉冲进行选择输出的过程;本模块实现了双脉冲的二选一;最终目的为了计费模块中对行驶过程中不同的时段进行计价。
模块元件如下:
控制模块框图
控制模块仿真波形为:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity kong is
port(en0,en1:in std_logic; --使能选择信号
clk_in1:in std_logic; --14分频输入信号
clk_in2:in std_logic; --13分频输入信号
clk_out:out std_logic); --输出信号
end kong;
architecture rt3 of kong is
begin
process(en0,en1)
begin
if en0='1' then --实现二选一功能
clk_out<=clk_in1;
elsif en1='1' then
clk_out<=clk_in2;
end if;
end process;
end rt3;
4.计费模块
当计费信号start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同的单价时段进行计费。即行程在2km内,而且等待累计时间小于2min则为起步价5元;2km外以每公里1.4.元计费,等待累积时间超过2min则按每分钟1.3元计费。c0,c1,c2,c3分别表示费用的显示。
模块元件为:
计费模块框图
计费模块仿真波形为:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --计费驱动信号
start:in std_logic; --计费开始信号
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt4 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步价5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000"; --计价范围0~999.9
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt4;
5.显示模块
显示模块完成计价,计时和计程数据显示。计费数据送入显示模块进行译码,最后送至以百元,十元,元,角为单位对应的数码管上显示。计时数据送入显示模块进行译码,最后送至以分为单位对应的数码管上显示。计程数据送入显示模块进行译码,最后送至以km为单位的数码管上显示。
模块元件为:
显示模块框图
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; --定义库包
entity xianshi is --定义实体
port(
clk_scan:in std_logic; --扫描时钟信号端口设置
c3,c2,c1,c0:in std_logic_vector(3 downto 0); --总费用输入端口
k0,k1:in std_logic_vector(3 downto 0); --里程输入端口
m0,m1:in std_logic_vector(3 downto 0); --等待时间输入端口
sel:out std_logic_vector(2 downto 0); --控制数码管位选信号的扫描信号输出端口
led:out std_logic_vector(6 downto 0); --数码管的控制端口
led_dp:out std_logic --数码管的小数点输出端口
);
end xianshi;
architecture rt5 of xianshi is
signal an:std_logic_vector(6 downto 0); --数码显示管中间变量
signal shuju:std_logic_vector(3 downto 0); --选择输入端的中间变量
signal cnt:std_logic_vector(2 downto 0); --控制数码管的中间变量
signal xiaodian:std_logic; --小数点的中间变量
begin
process(clk_scan) --开始进程
begin
if clk_scan'event and clk_scan='1' then
cnt<=cnt+1; --每有一个扫描信号上升沿实现加1扫描
end if;
end process; --结束进程
process(cnt) --开始进程(选择扫描显示数码管)
begin
case cnt is --扫描时给每个数码管赋值
when "000"=>shuju<=c0;
when "001"=>shuju<=c1;
when "010"=>shuju<=c2;
when "011"=>shuju<=c3;
when "100"=>shuju<=k0;
when "101"=>shuju<=k1;
when "110"=>shuju<=m0;
when "111"=>shuju<=m1;
when others=> null;
end case;
if (cnt="001" or cnt="110")
then xiaodian<='1'; --在里程和总费用的个位处显示小数点
else xiaodian<='0';
end if;
end process; --结束进程
process(shuju) --开始进程(译码显示)
begin
case shuju is
when "0000"=>an<="0111111"; --0
when "0001"=>an<="0000110"; --1
when "0010"=>an<="1011011"; --2
when "0011"=>an<="1001111"; --3
when "0100"=>an<="1100110"; --4
when "0101"=>an<="1101101"; --5
when "0110"=>an<="1111101"; --6
when "0111"=>an<="0000111"; --7
when "1000"=>an<="1111111"; --8
when "1001"=>an<="1101111"; --9
when others=>null;
end case;
end process;
sel<=cnt;
led<=an;
led_dp<=xiaodian;
end rt5;
二、课程设计工作记录:
包括:设计步骤与时间安排、调试步骤与时间安排、课题完成结果说明
2.课题完成结果说明:
此计费器能实现起步价是5元;实现实验要求的1公里计费一次单价,行驶公里大于2km时每公里按1.4元计费并能显示里程和总共的费用。当行驶了6公里,等待了4分钟时,费用显示为15.8元。与计算公式总费用=起步费用+(里程-2公里)*里程单价+等候时间*等后单价;即15.8=5+(6-2)*1.4+4*1.3。实验结果与理论结果完全一致,实验设计成功。
‘肆’ EDA心得体会
三.心得体会
1.困难首先出现在Quartus软件的应用上,一开始把文件夹取名为汉字名“数字秒表”,出现错误,后来知道,文件必须保存在英文文件夹下。还有,一开始没有注意到程序文件保存时要保存成实体名.VHD的形式,在编译时出错。
2.第二个困难出现在控制显示的时候,一开始选择直接把数据送到数码管显示,中间没有加扫描控制模块,结果显示乱码和错码,后来经过同学帮助和提示知道,必须采用动态扫描的方法显示,通过ledcom口移位控制数码管,逐位显示。
3.第三次困难出现在编制显示码表的时候,从h~~~a赋值应该最高位为h,最低位为a,一开始时弄反了,编制的错误码表导致输出错码。后来仔细看实验指导书,自己发现了错误,予以及时纠正。
4.第四次困难出现在分配管脚的时候,会发现某写管脚被重复分配,导致冲突;另外,在分配数码管的管脚时应注意低四位和高四位数码管的管脚分配,由于本次设计使用的开发板上有8个数码管,最高两位的数码管用不到,所以始终不予显示,在控制端口端,始终给以高电平。
5.在写程序时会输错部分关键字或漏掉一些小的标点之类的,导致编译不通过,需要经过反复查找,所以,觉得在输程序时就应注意细节,提高一次正确率,避免一些小错误的发生,起到事半功倍的效果。
6.这次EDA实践让我更深刻的了解了现代数字电路系统设计相对于传统电子系统设计的模式的优势,采用模块法自顶向下设计的原则,一边设计一边调试,使系统的开发速度更快。
‘伍’ EDA实验,用quartus软件编译一个和:16位二进制数比较器
不知道以下解答是否满足需要?
mole comp16(da,db,res);
input [15:0] da;
input [15:0] db;
output [1:0] res; //2'b11: 相等;2'b10: da>db;2'01: da<db
reg [1:0] res;
always @*
if(da>db)
res=2'b10;
else if(da==db)
res = 2'b11;
else
res = 2'b01;
endmole
‘陆’ 什么是EDA软件
是电子设计自动化。
电子设计自动化(英语:Electronic design automation,缩写:EDA)是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。
在电子产业中,由于半导体产业的规模日益扩大,EDA 扮演越来越重要的角色。使用这项技术的厂商多是从事半导体器件制造的代工制造商,以及使用 EDA 模拟软件以评估生产情况的设计服务公司。EDA 工具也应用在现场可编程逻辑门阵列的程序设计上。
(6)eda编译器实验图片扩展阅读
eda的历史发展
在电子设计自动化出现之前,设计人员必须手工完成集成电路的设计、布线等工作,这是因为当时所谓集成电路的复杂程度远不及现在。工业界开始使用几何学方法来制造用于电路光绘(photoplotter)的胶带。
到了1970年代中期,开发人应尝试将整个设计过程自动化,而不仅仅满足于自动完成掩膜草图。第一个电路布局、布线工具研发成功。设计自动化研讨会(Design Automation Conference)在这一时期被创立,旨在促进电子设计自动化的发展。
电子设计自动化发展的下一个重要阶段以卡弗尔·米德(Carver Mead)和琳·康维于1980年发表的论文《超大规模集成电路系统导论》(Introction to VLSI Systems)为标志。这一篇具有重大意义的论文提出了通过编程语言来进行芯片设计的新思想。
如果这一想法得到实现,芯片设计的复杂程度可以得到显着提升。这主要得益于用来进行集成电路逻辑仿真、功能验证的工具的性能得到相当的改善。随着计算机仿真技术的发展,设计项目可以在构建实际硬件电路之前进行仿真,芯片布局、布线对人工设计的要求降低。
而且软件错误率不断降低。直至今日,尽管所用的语言和工具仍然不断在发展,但是通过编程语言来设计、验证电路预期行为,利用工具软件综合得到低抽象级(或称“后端”)物理设计的这种途径,仍然是数字集成电路设计的基础。
‘柒’ EDA实验报告带PCB图的
那就随便在网上找个图 画个PCB就好了啊