vhdl

阅读 / 问答 / 标签

用VHDL语言设计一个频率计

--功能:频率计。具有4位显示,能自动根据7位十进制计数的结果,自动选择有效数据的--高4位进行动态显示。小数点表示是千位,即KHz。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity plj is port ( start:in std_logic; --复位信号 clk :in std_logic; --系统时钟 clk1:in std_logic; --被测信号 yy1:out std_logic_vector(7 downto 0); --八段码 w1 :out std_logic_vector(3 downto 0)); --数码管位选信号end plj;architecture behav of PLj issignal b1,b2,b3,b4,b5,b6,b7:std_logic_vector(3 downto 0); --十进制计数器signal bcd:std_logic_vector(3 downto 0); --BCD码寄存器signal q :integer range 0 to 49999999; --秒分频系数signal qq : integer range 0 to 499999; --动态扫描分频系数signal en,bclk:std_logic; --使能信号,有效被测信号signal sss : std_logic_vector(3 downto 0); --小数点signal bcd0,bcd1,bcd2,bcd3 : std_logic_vector(3 downto 0);--寄存7位十位计数器中有效的高4位数据beginsecond:process(clk) --此进程产生一个持续时间为一秒的的闸门信号begin if start="1" then q<=0; elsif clk"event and clk="1" then if q<49999999 then q<=q+1; else q<=49999999; end if; end if; if q<49999999 and start="0" then en<="1"; else en<="0"; end if;end process;and2:process(en,clk1) --此进程得到7位十进制计数器的计数脉冲begin bclk<=clk1 and en;end process;com:process(start,bclk) --此进程完成对被测信号计脉冲数begin if start="1" then --复位b1<="0000";b2<="0000";b3<="0000";b4<="0000";b5<="0000";b6<="0000";b7<="0000"; elsif bclk"event and bclk="1" then if b1="1001" then b1<="0000"; --此IF语句完成个位十进制计数 if b2="1001" then b2<="0000"; --此IF语句完成百位十进制计数 if b3="1001" then b3<="0000"; --此IF语句完成千位十进制计数 if b4="1001" then b4<="0000"; --此IF语句完成万位十进制计数 if b5="1001" THEN b5<="0000"; --此IF语句完成十万位十进制计数 if b6="1001" then b6<="0000"; --此IF语句完成百万位十进制计数 if b7="1001" then b7<="0000"; --此IF语句完成千万位十进制计数 else b7<=b7+1; end if; else b6<=b6+1; end if; else b5<=b5+1; end if; else b4<=b4+1; end if; else b3<=b3+1; end if; else b2<=b2+1; end if; else b1<=b1+1; end if; end if;end process;process(clk) --此进程把7位十进制计数器有效的高4位数据送如bcd0~3;并得到小数点信息begin if rising_edge(clk) then if en="0" then if b7>"0000" then bcd3<=b7; bcd2<=b6; bcd1<=b5; bcd0<=b4; sss<="1110"; elsif b6>"0000" then bcd3<=b6; bcd2<=b5; bcd1<=b4; bcd0<=b3; sss<="1101"; elsif b5>"0000" then bcd3<=b5; bcd2<=b4; bcd1<=b3; bcd0<=b2; sss<="1011"; else bcd3<=b4; bcd2<=b3; bcd1<=b2; bcd0<=b1; sss<="1111"; end if; end if; end if;end process;weixuan:process(clk) --此进程完成数据的动态显示begin if clk"event and clk="1" then if qq< 99999 then qq<=qq+1;bcd<=bcd3; w1<="0111"; if sss="0111" then yy1(0)<="0"; else yy1(0)<="1"; end if; elsif qq<199999 then qq<=qq+1;bcd<=bcd2; w1<="1011"; if sss="1011" then yy1(0)<="0"; else yy1(0)<="1"; end if; elsif qq<299999 then qq<=qq+1;bcd<=bcd1; w1<="1101"; if sss="1101" then yy1(0)<="0"; else yy1(0)<="1"; end if; elsif qq<399999 then qq<=qq+1;bcd<=bcd0; w1<="1110"; if sss="1110" then yy1(0)<="0"; else yy1(0)<="1"; end if; else qq<=0; end if; end if;end process;m0: process (bcd) --译码 begin case bcd is when "0000"=>yy1(7 downto 1)<="0000001"; when "0001"=>yy1(7 downto 1)<="1001111"; when "0010"=>yy1(7 downto 1)<="0010010"; when "0011"=>yy1(7 downto 1)<="0000110"; when "0100"=>yy1(7 downto 1)<="1001100"; when "0101"=>yy1(7 downto 1)<="0100100"; when "0110"=>yy1(7 downto 1)<="1100000"; when "0111"=>yy1(7 downto 1)<="0001111"; when "1000"=>yy1(7 downto 1)<="0000000"; when "1001"=>yy1(7 downto 1)<="0001100"; when others=>yy1(7 downto 1)<="1111111"; end case;end process;end behav;

数字系统设计与VHDL的目录

第1章逻辑设计基本原理简介1.1组合逻辑电路1.2布尔代数与代数式的化简1.3卡诺图1.3.1用卡诺图中嵌入的变量进行化简1.4用与非门和或非门进行设计1.5组合电路中的冒险1.6触发器和锁存器1.7MEALY时序电路设计1.7.1MEALY时序电路设计例子1:序列检测器1.7.2MEALY时序电路设计例子2:BCD码一余3码转换器1.8MOORE时序电路设计1.8.1MOORE电路例子1:序列检测器1.8.2MOORE电路设计例子2:非归零码-曼彻斯特码转换器1.9等价状态和状态表化简1.10时序电路的时序1.10.1传输延迟、建立时间和保持时间1.10.2最大时钟工作频率1.10.3时序条件1.10.4时序电路中的毛刺1.10.5同步设计1.11三态逻辑和总线习题第2章VHDL简介2.1计算机辅助设计2.2硬件描述语言2.2.1如何学习一种语言2.3组合逻辑电路的VHDL描述2.4VHDL模块2.4.1四位全加器2.4.2BUFFER模式的使用2.5顺序语句和进程语句2.6用进程语句模拟触发器2.7含有WAIT语句的进程2.8两种VHDL延迟:传输延迟和惯性延迟2.9VHDL代码的编译、仿真与综合2.9.1多进程仿真2.10VHDL数据类型和运算符2.10.1数据类型2.10.2VHDL语言的运算符2.11简单综合示例2.12多路选择器的VHDL设计2.12.1并发语句的使用2.12.2进程的使用2.13VHDL语言的库2.14用VHDL进程语句模拟寄存器和计数器2.15VHDL的行为和结构描述方式2.15.1时序机建模2.16变量、信号和常数2.16.1常数2.17数组2.17.1矩阵2.18VHDL中的循环语句2.19ASSERT和REPORT语句习题第3章可编程逻辑器件简介3.1可编程逻辑器件简介3.2简单可编程逻辑器件3.2.1只读存储器3.2.2可编程逻辑阵列3.2.3可编程阵列逻辑3.2.4可编程逻辑器件/通用阵列逻辑3.3复杂可编程逻辑器件3.3.1CPLD示例:XILINX公司的COOLRUNNER系列芯片322可编程逻辑阵列3.2.3可编程阵列逻辑3.2.4可编程逻辑器件,通用阵列逻辑3.3复杂可编程逻辑器件3.3.1CPLD示例:Xilinx公司的CoolRunner系列芯片3.4现场可编程门阵列3.4.1FPGA的结构3.4.2FPGA编程技术3.4.3可编程逻辑模块的结构3.4.4可编程互联3.4.5FPGA中的可编程I/O模块3.4.6FPGA中的专用元件3.4.7FPGA的应用3.4.8FPGA设计流程习题第4章设计举例4.1BCD码-七段显示译码器4.2BCD加法器4.332位加法器4.3.1先行进位加法器4.4交通灯控制器4.5控制电路状态图4.6记分板和控制器4.6.1数据通道4.6.2控制器4.6.3VHLD模型4.7同步与去抖动4.7.1单脉冲发生器4.8相加-移位结构乘法器4.9阵列结构乘法器4.9.1VHDL编程4.10有符号整数/分数的乘法4.11键盘扫描器4.11.1扫描器4.11.2去抖动器4.11.3译码器4.11.4控制器4.11.5VHDL代码4.11.6键盘扫描器的测试平台4.12二进制除法器的设计4.12.1无符号数除法器4.12.2有符号数除法器习题第5章SM图与微程序5.1状态机流程图5.2SM图的推导5.2.1二进制乘法器5.2.2掷骰子游戏5.3SM图的实现5.3.1二进制乘法器控制器的实现5.4掷骰子游戏的实现5.5微程序5.5.1双地址微代码5.5.2单限制量、单地址微代码5.5.3掷骰子游戏控制器的微程序实现5.6链接状态机习题第6章FPGA设计实例第7章浮点数算数第8章VHDL语言的高级议题第9章RISC微处理器设计第10章硬件测试和可测试性设计第11章设计实例补充附录AVHDL语言小结附录BIEEE标准库附录CTEXTIO包集合附录D专题设计项目索引参考文献……

四位十进制数字频率计VHDL程序 10~9999KHZ

9999+1

求基于VHDL多功能数字频率计各模块作用

1。电源模块,系统供电的,没有电不行。再做的复杂点,可以加入功耗的控制,控制其他模块的供电。在某些情况下,比如,可以关掉显示模块,要用的时候再打开。这样可以省电。2。键控制模块,控制键盘输入的,比如你想让他关掉显示,让他测量频率,范围多少,等。3。显示模块,显示你想知道的内容4。单片机,作为CPU用的,软件架构在这个上面跑。5。CPLD,数字频率计的核心,就是测频率的。

VHDL在数字电路的应用前景与发展现状

人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。现代电子产品在性能提高、复杂度增大的同时,产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。进入90年代以来,电子信息产品的明显特点是复杂程度加深,然而传统的基于门级描述的单层次设计,设计的所有工作(包括设计输入,仿真和分析,设计修改等)都是在基本逻辑门这一层次上进行的,显然这种设计方法不能适应新的形势,为此引入了一种高层次的电子设计方法,即VHDL语言设计方法。VHDL是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接方式,与传统的门级描述方式相比,VHDL可以用简洁明确的代码描述,来进行复杂控制逻辑的设计,灵活且方便,也便于设计结果的交流、保存和重用。本文主要介绍VHDL语言的产生与发展并将其运用于具体的电子电路设计,加以仿真分析。2 、VHDL语言的产生与发展VHDL是VeryHighSpeedIntegratedCireuitHardwareDeseriptionLanguage的英文缩写,是一种快速的电路设计工具,功能涵盖了电路描述、电路合成、电路仿真等三大电路的设计工作。VHDL原来是由美国国防部与20世纪70年代发展的电路设计工具,并于1987年成为IEEE的一种标准语言。VHDL语言的产生是电子设计领域的一场革命,目前正处于高速发展阶段,其每年能够以超过30%的速度快速成长,已成为目前中国的主流设计语言。由于HDL电路描述语言所能涵盖的范围相当广,能适用于各种不同的阶层的设计工程师的需求。从AsIC的设计到PCB系统的设计,VHDL电路描述语言都能派上用场。不知道有没有用 复制来的

如何用VHDL语言描述时钟信号Clk的上升沿和下降?

if clk"event then rdy<="1"; end if; 时钟变动的时候rdy为1 请采纳我的答案。

VHDL 语言综合时,出现以下的警告,(quartus II 写的)

第一个貌似你有元件命名重了

用VHDL语言设计一个共阴极七段数码管的译码电路,急求大神解答,高分求助!!!不要粘贴复制的

74LS49是一个7段译码器,其VHDL描述如下:LIBRARYIEEE;USE IEEE.Std_logic_1164.ALL;ENTITYls49 IS PORT(bl: IN Std_logic; bi: IN Std_logic_vector(3 DOWNTO 0); a,b,c,d,e,f,g: OUT Std_logic);ENDls49;ARCHITECTURE behavl_49 OF ls49 IS SIGNAL s: Std_logic_vector(6 DOWNTO 0);BEGIN PROCESS (bi,bl) BEGIN IF (bl/="1") AND (bl/="H") THEN s<=(OTHERS => "0"); ELSE CASE bi IS WHEN "0000"=>s<="0111111"; WHEN "0001"=>s<="0000110"; WHEN "0010"=>s<="1011011"; WHEN "0011"=>s<="1001111"; WHEN "0100"=>s<="1100110"; WHEN "0101"=>s<="1101101"; WHEN "0110"=>s<="1111101"; WHEN "0111"=>s<="0100111"; WHEN "1000"=>s<="1111111"; WHEN "1001"=>s<="1101111"; WHEN "1010"=>s<="1110111"; WHEN "1011"=>s<="1111100"; WHEN "1100"=>s<="0111001"; WHEN "1101"=>s<="1011110"; WHEN "1110"=>s<="1111001"; WHEN "1111"=>s<="1110001"; WHEN OTHERS=>s<="0000000"; END CASE; END IF; END PROCESS; a <= s(0); b <= s(1); c <= s(2); d <= s(3); e <= s(4); f <= s(5); g <= s(6);END behavl49;

VHDL语言 循环设计求教!

libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityledisport(reset:instd_logic;clk:instd_logic;led:outstd_logic_vector(2downto0));endentity;architecturebehaveofledissignalcnt:std_logic_vector(24downto0);signalcnt_1:std_logic;signalcnt_2:std_logic;signalcnt_set:std_logic;beginprocess(clk,reset)variablecount:integerrange0to2:=0;beginifreset="0"thenled<=(others=>"0");count:=0;elsifclk"eventandclk="1"thenifcnt_set="1"thencasecountiswhen0=>led<="001";when1=>led<="010";when2=>led<="100";whenothers=>null;endcase;ifcount=2thencount:=0;elsecount:=count+1;endif;endif;endif;endprocess;process(reset,clk)beginifreset="0"thencnt<=(others=>"0");cnt_1<="0";cnt_2<="0";cnt_set<="0";elsifclk"eventandclk="1"thenifcnt_2="0"andcnt_1="1"andcnt(23)="1"thencnt_set<="1";elsecnt_set<="0";endif;cnt<=cnt+1;cnt_2<=cnt_1;cnt_1<=cnt(23);endif;endprocess;endbehave;看起来提问的意思是做一个流水灯,不知道这样满足不满足你的要求,T:resetL:L1L2L3;当T=0时L1L2L3输出都为0;T=1时,循环输出流水灯,可以通过修改cnt(num)中的num数来调整循环的快慢.num越大,循环时间越长;

vhdl语言中if语句里条件句到底要不要加括号?

可以加,也可以不加,没有区别。

vhdl语言中 什么时候需要加上process()啊

要语句顺序执行的情况下。

在VHDL语言中,单引号和双引号有什么区别,具体可以举一下例子吗

单引号表示字符文字,就是单个字符,例如"0"、"X"、"H"、"Z"等等;双引号表示字符串文字,也就是多个字符,例如"00"、"0110"、"ABC"等等。

问一个VHDL语言的问题???

VHDL中没有==

帮忙用VHDL语言编写信号发生器(三角波,方波,锯齿波),要求用计数器,方波,锯齿波幅值最大为10。

用vhdl编写信号发生器输出三角波,方波,锯齿波由于用VHDL编写输出的是数字信号,所以要在后面加入D/A转换实现方式 PLD(或FPGA)+D/A转换 用PLD(或FPGA)产生3种循环变化的数据量(这里用4位 实现幅值10=‘1010) 1 用0-10的循环加法计数 实现锯齿波 2 用0-10-0循环加减计数器 实现三角波 3 用0-10-0循环加减计数实现 方波 Library IEEE;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity sig is Port( clk,reset: in std_logic;Mod: in std_logic_vector(1 downto 0); --MOD为模式选择--00输出递增锯齿波 01输出递减锯齿波 --10 输出三角波 11 输出方波 dout: out std_logic_vector(3 downto 0));End sig;Architecture one of sig is Signal count:std_logic_vector(3 downto 0); --count 为计数 Signal addsub:std_logic; -- addsub 为0时 加法计数Begin -- 为1时 减法计数 cout<= count; -- 将计数值送给输出 Process(clk,reset,mod) Begin If reset="1" then -- 异步复位 Count<=”0000”; Elsif clk"event and clk="1" then If count=”1010” then --同步复位 Count<=”0000”; End if; Case mod is When “00” => if count --所得递增锯齿波波形周期为10个时钟周期count<= count+1;When “01” => count<= count-1; --所得递减锯齿波形周期为10个时钟周期When “10” =>if (addsub="0") then --所得三角波形周期为20个时钟周期count<= count+1; if (count=10) then --加法计数到10 addsub <="1" --addsub 为1 开始减法计数 else addsub<="0"; end if; else count<=count-1; if (count<1) then addsub<="0"; else addsub<="1"; end if; end if; when “11” =>if (addsub="0") then count<= count+10; --步进为10 if (count=10) then addsub <="1" else addsub<="0"; end if; else count<=count-10; if (count<10) then addsub<="0"; else addsub<="1"; end if; --所得方波周期为4个时钟周期 end if; When others count<="0000"; End case; End if; End process;End one;

在VHDL语言中怎样实现条件编译?

可以用硬件语言编写测试文件,对目标系统进行仿真

用vhdl语言实现8位并转串电路和串转并电路,求大神指导!!急用!!

可以参阅《VHDL数字系统设计》(科学出版社2009年出版)p.155~159,上面有完整的电路描述和仿真图。

询问VHDL语言XOR门的问题

这条语句的编译结果和异或的先后顺序没有关系如果你只是想知道RTL级的结果,那么要看是哪个综合工具来综合,而且要看综合选项一般会综合为这个样子AXORB--XOR=>PCXORD--

用VHDL语言IF语句来实现4选1数据选择器,亲们我很着急啊,有没有好心人啊,帮帮我 啊

entity mux4_1 isport ( a,b,c,d: in std_logic; --4位输入信号,数据类型自己改s1,s2: in std_logic; --选择信号y : out std_logic ); --输出信号,数据类型和输入应一致end entity;architecture bhv of mux4_1 issignal s :std_logic_vector(1 downto 0);begins<=s1&s2;process(s,a,b,c,d)beginif s="00" then y<=a;elsif s="01" then y<=b;elsif s="10" then y<=c;else y<=d;end if;end process;end bhv;

用VHDL语言,设计一个数码管显示的程序

数码管显示程序内容肯定

我想学习VHDL语言,不知有谁能给我解答我的几个疑惑

VHDL可以描述一个单片机的功能,但即使学习了VHDL,也还是需要学习单片机的。因为VHDL是用于设计硬件系统的,而单片机只是一个硬件系统的实例,不了解单片机就无法设计它。VHDL用于设计硬件系统,与软件关系不太大。如果你设计的硬件系统中有MPU,需要运行软件的话,你还是需要学习软件设计的。学习VHDL除了看点书扫扫盲之外,主要是需要动手实际设计一些硬件系统。可以先从小一点的实例开始,基于FPGA来实现你的设计。VHDL不仅可以设计电子玩具,而且可以设计手机、电脑、CPU等等。

本设计采用先进EDA技术,利用QuartusII工作平台及硬件描述语言VHDL,设计一种电子密码锁。设计的密码锁的

不知道你是不是要完整的系统,需要的话百度hi联系我 给你发过去,内容很大

上升的vhdl描述语言是什么!?

你问的是上升沿?

三态门用VHDL语言怎么写?

library ieee;use ieee.std_logic_1164.all;entity yjynor isport(din:in std_logic; en: in std_logic; dout: out std_logic);end;architecture one of yjynor isbeginprocess(din,en)begin if en="1" then dout<=din; else dout<="Z"; --高阻态 end if;end process;end;

VHDL语言的sll运算符怎么使用.求例程.

操作数 SLL N; N为移位的位数。设操作数A=“11010001”,则语句A SLL 1; 结果为“10100010”

VHDL语言UART代码

UART通信library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity UART is --通用异步串行收发器实体Port ( UART_clk : in STD_LOGIC; --收发器时钟输入,50MHz UART_rst : in std_logic; UART_TX_buf : in STD_LOGIC_VECTOR(7 downto 0); UART_TX_TI : out std_logic; UART_TX_EN : in std_logic; UART_TXD : out std_logic; UART_baudrate : out STD_LOGIC); --收发器波特率输出19200的14倍频(测试完成后可以取消)end UART;architecture Behavioral of UART issignal baudrate_counter :std_logic_vector(6 downto 0):="0000000"; --波特率发生器分频计数器signal baudrate_out :std_logic:="0"; --波特率发生器波特率信号signal TX_clk : std_logic:="0";signal tx_clk_counter : std_logic_vector(3 downto 0) :="0000";type TX_STATE is (TX_idle,TX_transfer);signal TX_current_state,TX_next_state : Tx_state;signal TX_buf_shift : std_logic_vector(9 downto 0):= "0111111111";signal TX_counter :std_logic_vector(3 downto 0):="0000";signal TX_start : std_logic:="0";signal TXD_buf: std_logic:="0";signal TX_TI : std_logic:="1";beginbaudrate: process (UART_clk) --波特率发生器进程begin if rising_edge(UART_clk) then --对输入时钟进行分频获得所需波特率的14倍频if (baudrate_counter >= "1011100") thenbaudrate_counter <= "0000000";baudrate_out <= not baudrate_out;elsebaudrate_counter <= baudrate_counter + "1";baudrate_out <= baudrate_out;end if; end if;end process;UART_baudrate <= baudrate_out; --将波特率信号传给输出接口sync_proc_tx: process(baudrate_out,UART_rst) --同步进程,状态机转换begin if (UART_rst = "1") thentx_current_state <= tx_idle; elsif (falling_edge(baudrate_out)) thentx_current_state <= TX_next_state; end if;end process;comb_proc_tx: process(baudrate_out,UART_rst) --组合逻辑,状态机转换、输出begin if (UART_rst = "1") thenTX_next_state <= TX_idle;TX_counter <= "0000";TXD_buf <= "1";TX_start <= "0";TX_TI <= "1";TX_clk_counter <= "0000";TX_buf_shift <= "1111111111"; elsif (rising_edge(baudrate_out)) thencase TX_current_state iswhen TX_idle => if (UART_TX_EN = "1" and TX_TI = "1") then --如果满足发送起始条件 TX_next_state <= TX_transfer; --转换下一状态到发送 TX_counter <= "1010"; --发送bit计数器置数,发送10个bit,8bit数据加上开始结束位 TXD_buf <= "1"; --发送寄存器发送‘1" TX_start <= "1"; --发送过程标志 TX_TI <= "0"; --发送进行中标志,表示发送器不可用 TX_clk_counter <= "1101"; --分频计数器置数 TX_buf_shift <= "1" & UART_TX_buf & "0"; --寄存器保存数据与开始结束位 else TX_next_state <= TX_idle; TX_counter <= "0000"; TXD_buf <= "1"; TX_start <= "0"; TX_TI <= "1"; TX_clk_counter <= "0000"; TX_buf_shift <= "1111111111"; end if;when TX_transfer => if (TX_start = "1" and TX_TI = "0" and TX_counter /= "0000") then --进入正常发送状态 if (TX_clk_counter >= "1101") then --如果分频完成 TX_next_state <= TX_transfer; --没有发送完成,继续进入发送状态 TX_counter <= TX_counter - "1"; --发送bit计数器自减 TXD_buf <= TX_buf_shift(0); --发送数据 TX_start <= "1"; --发送过程标志继续允许 TX_TI <= "0"; --发送器不允许使用 TX_clk_counter <= "0000"; --分频计数器清灵,继续下一次 TX_buf_shift <= "1" & TX_buf_shift(9 downto 1); --数据移位 else TX_next_state <= TX_transfer; TX_counter <= TX_counter; TXD_buf <= TXD_buf; TX_start <= "1"; TX_TI <= "0"; TX_clk_counter <= TX_clk_counter + "1"; TX_buf_shift <= TX_buf_shift; end if; else TX_next_state <= TX_idle; TX_counter <= "0000"; TXD_buf <= "1"; TX_start <= "0"; TX_TI <= "1"; TX_clk_counter <= "0000"; TX_buf_shift <= "1111111111"; end if;when others => TX_next_state <= TX_idle; TX_counter <= "0000"; TXD_buf <= "1"; TX_start <= "0"; TX_TI <= "1"; TX_clk_counter <= "0000"; TX_buf_shift <= "1111111111";end case; end if;end process;UART_TXD <= TXD_buf;UART_TX_TI <= TX_TI;end Behavioral;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity transmitter isport(cs,clk,rx:in std_logic;indata:in std_logic_vector(7 downto 0); txd,ti:out std_logic);end transmitter;architecture tr1 of transmitter issignal sig_count:std_logic_vector(3 downto 0);signal sig_ti,sig_ti1,sig_txd,sig_buffer:std_logic;signal sig_data:std_logic_vector(7 downto 0);signal sig_txddata:std_logic_vector(9 downto 0);beginprocess(cs,clk,rx)beginif(clk"event and clk="1")thenif(cs="0")thenif(sig_buffer="0")thenif(rx="0")thenfor i in 8 downto 1 loopsig_txddata(i)<=indata(i-1);end loop;sig_txddata(9)<="0"; --加起始位sig_data<=indata;sig_buffer<="1";end if;elsefor i in 9 downto 1 loopsig_txddata(i)<=sig_txddata(i-1);end loop;sig_txd<=sig_txddata(9);sig_txddata(0)<="1"; --加停止位if(sig_count="1000")thensig_count<="0000";elsif(sig_count="0000"and sig_ti="1")thensig_buffer<="0";sig_ti<="0";elsesig_count<=sig_count+"1";sig_ti<="1";end if;end if;end if;end if;end process;processbeginif(sig_ti="0")thentxd<="1";else txd<=sig_txd;end if;end process;ti<=not sig_ti;end tr1;

&在VHDL语言中是什么意思,具体怎么用呢?谢谢

&的用法看楼上的解释这个程序作用很简单:当clk1的上升沿来的时候,讲fskcodein和datacom的1位合并赋给datacom估计这里datacom是个std_logic_vector(1 downto 0)类型的,实现的就是吧fskcodein的数据移位输入

VHDL语言编程用什么编译软件

疑似假用户022442

VHDL语言的前景怎么样?是不是该淘汰了?

不是吧。楼上说的。。。我现在正对VHDL感兴趣呢,这不是打消我积极性了么。。。楼主是什么专业的啊,微电子的吗?

VHDL语言100例详解的图书目录

绪论——专用集成电路(asic)设计与vhdl语言(代前言)i asic设计面临严峻的挑战ii 硬件描述语言 vhdl的出现与发展状况iii vhdl语言的特点iv vhdl语言高级综合v vhdl语言混合级模拟vi vhdl语言高级综合系统talentvii vhdl语言100例的选取与本书的撰写目标第1例 带控制端口的加法器第2例 无控制端口的加法器第3例 乘法器第4例 比较器第5例 二路选择器第6例 寄存器第7例 移位寄存器第8例 综合单元库第9例 七值逻辑与基本数据类型第10例 函数第11例 七值逻辑线或分辨函数第12例 转换函数第13例 左移函数第14例 七值逻辑程序包第15例 四输入多路器第16例 目标选择器第17例 奇偶校验器第18例 映射单元库及其使用举例第19例 循环边界常数化测试第20例 保护保留字第21例 进程死锁第22例 振荡与死锁第23例 振荡电路第24例 分辨信号与分辨函数第25例 信号驱动源第26例 属性transaction和分辨信号第27例 块保护及属性event,stable第28例 形式参数属性的测试第29例 进程和并发语句第30例 信号发送与接收第31例 中断处理优先机制建模第32例 过程限定第33例 整数比较器及其测试第34例 数据总线的读写第35例 基于总线的数据通道第36例 基于多路器的数据通道第37例 四值逻辑函数第38例 四值逻辑向量按位或运算第39例 生成语句描述规则结构第40例 带类属的译码器描述第41例 带类属的测试平台第42例 行为与结构的混合描述第43例 四位移位寄存器第44例 寄存/计数器第45例 顺序过程调用第46例 vhdl中generic缺省值的使用第47例 无输入元件的模拟第48例 测试激励向量的编写第49例 delta延迟例释第50例 惯性延迟分析第51例 传输延迟驱动优先第52例 多倍(次)分频器第53例 三位计数器与测试平台第54例 分秒计数显示器的行为描述第55例 地址计数器第56例 指令预读计数器第57例 加、减、乘指令的译码和操作第58例 2-4译码器结构描述第59例 2-4译码器行为描述第60例 转换函数在元件例示中的应用第61例 基于同一基类型的两分辨类型的赋值相容问题第62例 最大公约数的计算第63例 最大公约数七段显示器编码第64例 交通灯控制器第65例 空调系统有限状态自动机第66例 fir滤波器第67例 五阶椭圆滤波器第68例 闹钟系统的控制器第69例 闹钟系统的译码器第70例 闹钟系统的移位寄存器第71例 闹钟系统的闹钟寄存器和时间计数器第72例 闹钟系统的显示驱动器第73例 闹钟系统的分频器第74例 闹钟系统的整体组装第75例 存储器第76例 电机转速控制器第77例 神经元计算机第78例 am2901四位微处理器的alu输入第79例 am2901四位微处理器的alu第80例 am2901四位微处理器的ram第81例 am2901四位微处理器的寄存器第82例 am2901四位微处理器的输出与移位第83例 am2910四位微程序控制器中的多路选择器第84例 am2910四位微程序控制器中的计数器/寄存器第85例 am2910四位微程序控制器的指令计数器第86例 am2910四位微程序控制器的堆栈第87例 am2910四位微程序控制器的指令译码器第88例 可控制计数器第89例 四位超前进位加法器第90例 实现窗口搜索算法的并行系统(1)——协同处理器第91例 实现窗口搜索算法的并行系统(2)——序列存储器第92例 实现窗口搜索算法的并行系统(3)——字符串存储器第93例 实现窗口搜索算法的并行系统(4)——顶层控制器第94例 mb86901流水线行为描述组成框架第95例 mb86901寄存器文件管理的描述第96例 mb86901内alu的行为描述第97例 移位指令的行为描述第98例 单周期指令的描述第99例 多周期指令的描述第100例 mb86901流水线行为模型参考文献附录i 100例内容摘要一览表附录ii vhdl专用术语中英文对照附录iii tllent系统 vhdl模拟器使用说明附光盘:内容包括100例有关的vhdl描述文件及talent系统vhdl模拟器

请问在VHDL语言中,顺行语句和并行语句的区别是什么?尽量完整哦。考试题呢。

顺序语句是用于行为描述的,是不能直接置于结构体中的,需要用进程语句包装成并行语句,或者用于描述子程序(函数、过程)。并行语句是用于数据流描述或者结构描述的,在结构体中的每一个并行语句,都描述了一个电路模块,并行语句是没有描述顺序的,结构体中的并行语句,可以按任何顺序书写。

将VHDL语言转换成Verilog HDL语言

module cnt99(clk, rst, en, cq, LED1, LED2, cout); input clk; input rst; input en; output [6:0] cq; reg [6:0] cq; output [3:0] LED1; reg [3:0] LED1; output [3:0] LED2; reg [3:0] LED2; output cout; reg cout; always @(posedge clk or posedge rst or en) begin: xhdl0 reg [3:0] cqi; reg [6:0] cqii; reg [3:0] hi; if (rst == 1"b1) begin cqi = {4{1"b0}}; hi = {4{1"b0}}; end else begin if (en == 1"b1) begin if (hi < 9) begin if (cqi < 9) cqi = cqi + 1; else begin cqi = {4{1"b0}}; hi = hi + 1; end end else hi = {4{1"b0}}; if (cqii < 99) cqii = cqii + 1; else cqii = {7{1"b0}}; end end if (cqi == 9 & hi == 9) cout <= 1"b1; else cout <= 1"b0; cq <= cqii; LED1 <= hi; LED2 <= cqi; endendmodule

关于这个vhdl语言的问题,需要详细的解释,高分求助

你在什么地方复制来的,乱七八糟的

VHDL语言 怎么理解并行语句和PROCESS的区别 IF怎么用 求详解 可以追加

并行语句可以理解为 好多个逻辑电路一起进行数据处理 而不是单片机那种一环一环 需要前面的语句处理完了 才能处理后面的语句, process就是一个个程序快 相当于一个个电路快一个电路块是一个process process里面是逻辑电路或时序电路 if的用法注意就是一定要在时序电路中才能用 就是一定在process里面才行

用vhdl 语言设计 序列信号发生器

10110101序列信号发生器.vhdlibrary IEEE; use IEEE.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count8 is port ( r: in std_logic; clk: in STD_LOGIC; cout: out std_logic ); end count8; architecture count8_arch of count8 is signal dd: std_logic_vector ( 2 downto 0 ); begin count: process ( r,clk ) begin if ( r="1" ) then dd<="000"; elsif( clk"event and clk = "1") then dd <= dd + "1"; end if ; end process count ; with dd select cout<="1"when"000", "0"when"001", "1"when"010", "1"when"011", "0"when"100", "1"when"101", "0"when"110", "1"when"111", "0"when others ;

用VHDL语言编写程序

我用quartusⅡ已编译并且仿真都对的,我写的是0亮1灭,如果实际情况与这相反,你自己倒一下。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_SIGNED.ALL;USEIEEE.numeric_std.all;ENTITYtestISPORT(clock:instd_logic;-----clock1加48MHz的信号row:outstd_logic_vector(0to7));ENDtest;ARCHITECTUREbehaveOFtestISCONSTANTfp_clka:INTEGER:=12000000;---扫描信号频率为2HzSIGNALa:INTEGERRANGE0TO12000001;signalsaomiao:integerrange0to9;SIGNALclka:std_logic;BEGINPROCESS(clock)BEGINIFrising_edge(clock)THENIFa<fp_clkathen--clkaa<=a+1;clka<=clka;ELSEa<=0;clka<=NOTclka;endif;endif;endprocess;process(clka)BEGINIFrising_edge(clka)THENsaomiao<=saomiao+1;ifsaomiao=9thensaomiao<=0;endif;casesaomiaois---"1"代表不亮,"0"代表亮when0=>row<="01111111";when1=>row<="10111111";when2=>row<="11011111";when3=>row<="11101111";when4=>row<="11110111";when5=>row<="11111011";when6=>row<="11111101";when7=>row<="11111110";when8=>row<="00000000";whenothers=>row<="11111111";ENDCASE;ENDIF;endprocess;ENDbehave;

vhdl语言数据对象有哪几种?作用范围如何?对其赋初值作用有何不同

在非仿真程序中一般不建议使用for语句的,因为复杂点的for语句是综合不了的,一般用于比较简单的功能赋值,比如例化ram用。在仿真语句中是可以识别for语句的,一般用于对程序的赋值之类的,功能和C语言的功能是差不多的,只是格式不太一样。

在VHDL语言里实体pin 定义中in bit和out bit区别

in bit 的意思是输入, 数据类型为bitout bit的意思是输出,数据类型为bit一个是输入一个是输出是不一样的

如何用VHDL语言将20MHz分频为500Hz?

library就不写了。主要是用prescaler。现在这个程序输出10kHz。如果你要100kHz,那么就把prescaler减少到500.。基本上是用50MHz的时钟计算,然后prescaler加法运算的速度就是50MHz。但是只有到prescaler加到一定程度的时候才触发输出信号。下面的这段代码输出10kHzPWM信号,占空比50%。我直接在这里写的,有错别怪我。。 entity something is port { CLK_50M : in std_logic; outputpin: out std_logic; --这个是你的输出针脚 }; end something; -- 中间的 architechture我就不写了 process(CLK_50M) signal prescaler : integer in range 0 to 5000 := 0; begin if (CLK_50M"event and CLK_50M = "1") -- trigger event on rising edge(不知道怎么翻译。。。) if (prescaler > 4999) prescaler <= 0; else if (prescaler < 2500) outputpin <= "1"; --输出高电平 else outputpin <= "0"; --输出端输出低电平 end if; prescaler <= prescaler + 1 end if; end if; end process;

将VHDL语言改为Verilog HDL语言 LIBRARY IEEE; USE IEEE.STD

用VHDL语言设计一个4位二进制数据比较器,应该怎么设计?

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COMPARE4 IS ——四位比较器 PORT(IA_MORE_THAN_B:IN STD_LOGIC; ——高位比较的标志位的输入 IB_MORE_THAN_A:IN STD_LOGIC; IA_EQUAL_B:IN STD_LOGIC; A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);——两个输入 B:IN STD_LOGIC_VECTOR(3 DOWNTO 0); OA_MORE_THAN_B:OUT STD_LOGIC; OB_MORE_THAN_A:OUT STD_LOGIC; OA_EQUAL_B:OUT STD_LOGIC); END COMPARE4;ARCHITECTURE BEHAV OF COMPARE4 ISBEGIN PROCESS(IB_MORE_THAN_A, IA_EQUAL_B,IA_EQUAL_B) BEGIN IF(IA_EQUAL_B="1")THEN——从最高位比较,如果高位大则停止比较输出结果,否则进行下一位比较 IF(A(3)>B(3))THEN OA_MORE_THAN_B<="1";OB_MORE_THAN_A<="0";OA_EQUAL_B<="0"; ELSIF(A(3)<B(3))THEN OA_MORE_THAN_B<="0";OB_MORE_THAN_A<="1";OA_EQUAL_B<="0"; ELSIF(A(2)>B(2))THEN OA_MORE_THAN_B<="1";OB_MORE_THAN_A<="0";OA_EQUAL_B<="0"; ELSIF(A(2)<B(2))THEN OA_MORE_THAN_B<="0";OB_MORE_THAN_A<="1";OA_EQUAL_B<="0"; ELSIF(A(1)>B(1))THEN OA_MORE_THAN_B<="1";OB_MORE_THAN_A<="0";OA_EQUAL_B<="0"; ELSIF(A(1)<B(1))THEN OA_MORE_THAN_B<="0";OB_MORE_THAN_A<="1";OA_EQUAL_B<="0"; ELSIF(A(0)>B(0))THEN OA_MORE_THAN_B<="1";OB_MORE_THAN_A<="0";OA_EQUAL_B<="0"; ELSIF(A(0)<B(0))THEN OA_MORE_THAN_B<="0";OB_MORE_THAN_A<="1";OA_EQUAL_B<="0"; ELSE ——如果输入中两个数相等的标志位为0,则表明高位不相等,停止比较,输出结果。 OA_MORE_THAN_B<="0";OB_MORE_THAN_A<="0";OA_EQUAL_B<="1"; END IF; ELSEOA_MORE_THAN_B<=IA_MORE_THAN_B;OB_MORE_THAN_A<=IB_MORE_THAN_A;OA_EQUAL_B<=IA_EQUAL_B; END IF; END PROCESS;END BEHAV;

求高手指点啊!请问在VHDL语言中什么情况下使用std_logic_unsigned程序包?

conv_integer(变量) 转换回来是conv_std_logic_vector(变量,位数)

用vhdl 语言设计 序列信号发生器

10110101序列信号发生器.vhd library IEEE; use IEEE.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count8 is port ( r: in std_logic; clk: in STD_LOGIC; cout: out std_logic ); end count8; architecture count8_arch of count8 is signal dd: std_logic_vector ( 2 downto 0 ); begin count: process ( r,clk ) begin if ( r="1" ) then dd<="000"; elsif( clk"event and clk = "1") then dd <= dd + "1"; end if ; end process count ; with dd select cout<="1"when"000", "0"when"001", "1"when"010", "1"when"011", "0"when"100", "1"when"101", "0"when"110", "1"when"111", "0"when others ;

三输入或非门 用VHDL语言怎么编呀? 不用整个程序,就逻辑关系那条程序就行

你好,下面是一个简单的小例子。LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY threeInNot IS PORT ( IN0,IN1,IN2:in std_logic; result: OUT STD_LOGIC); END mux21a; ARCHITECTURE behav OF threeInNot IS BEGIN result <= NOT( IN0 and IN1 and IN2);END behav;

与软件语言相比,VHDL有什么特点

  软件编程语言是顺序执行的,而硬件描述语言(比如VHDL)描述的硬件却是并行工作的,所以硬件描述语言中的语句是并行语句,没有先后顺序问题。即使VHDL中有顺序语句,也必须包装成并行语句(例如process语句、过程、函数等)的形式。

C语言和VHDL语言的区别

本人刚刚学过VHDL语言,也会C语言。两个语言没有什么联系。前者是面向硬件的,有点类似单片机。一个是面向软件的,是计算机编程。语法结构没什么大的相似。都是编程语言。如果你要制造一个定时炸弹的定时系统,VHDL适合。如果你要写一些病毒或者其他的软件,c就比较合适。。

请问在VHDL语言中,顺行语句和并行语句的区别是什么?尽量完整哦。考试题呢。

VHDL的并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。进程语句begin进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的信号。因此进程语句称为并行描述语句。进行语句结构内部所有语句都是顺序执行的进程语句的启动是由process后敏感信号表中所标明的敏感信号触发来的。各进程间的通信是由信号来传递的语法如下:标记:process(敏感信号表) 变量说明语句;begin 一组顺序语句;end process 标记;标记:为进程标号敏感信号表:是进程用来读取所有敏感信号(包括端口)的列表。变量说明:主要包括变量的数据类型说明、子程序说明等从begin到end process之间是一组顺序执行语句。敏感信号表所谓敏感信号表:就是用来存放敏感信号的列表。在进程语句中,敏感信号指那些发生改变后能引起进程语句执行的信号。敏感信号表中可以使用一个或多个信号,当其中一个或多个信号值改变时,就在进程内部引起语句执行。敏感信号表也可忽略,但程序中必须有其他形式的敏感信号激励。例如wait、wait for、wait until和wait on。进程语句的启动在VHDL语言中,进程有两种工作状态:等待和执行。当敏感信号表中的信号没有变化时,进程处于等待状态;当敏感信号表中的信号有变化时,进程处于执行状态进程语句的同步同一个结构体中不仅可以有多个进程存在,同一个结构体中的多个进程还可以同步。VHDL中通常采用时钟信号来同步进程,具体方法是:结构体中的几个进程共用同一个时钟信号来进行激励。并发信号赋值语句信号赋值语句在进程内部出现时,它是一种顺序描述语句。信号赋值语句在结构体的进程之外出现时,它将以一种并发语句的形式出现。它们在结构体中是并行执行的。注意:并发信号赋值语句是靠事件来驱动的,因此对于并发信号赋值语句来说,只有当赋值符号“<=”右边的对象有事件发生时才会执行该语句。条件信号赋值语句语法结构:目标信号<=表达式1 when 条件1 else 表达式2 when 条件2 else 表达式3 when 条件3 else ... 表达式n-1 when 条件n-1 else 表达式n;VHDL语言程序执行到该语句时,首先要进行条件判断,之后才进行信号赋值。如果满足条件,就将该条件前面那个表达式的值赋给目标信号;如果不满足条件按,就继续判断,直到最后一个表达式,如果前面的条件均不满足就无条件的赋值给最后一个表达式,因为最后一个表达式赋值无需条件。选择信号赋值语句语法结构:with 表达式 select 目标信号<=表达式1 when 选择条件1, 表达式2 when 选择条件2, ... 表达式n when 选择条件n;该语句在赋值之前需要对条件进行判断,附和条件则赋值,否则继续判断,直到最后一个语句。选择赋值语句需要把表达式的值在条件中都列举出来。元件例化语句在VHDL中,引用元件或者模块的说明采用component语句,他的作用是在结构体说明部分说明引用的元件或者模块,是元件说明语句。语法格式:component 引用的元件名 generic 参数说明; port 端口说明;end componet;引用的元件名:是将一个设计现成的实体定义为一个元件,是已经设计好的实体名,用来制定要在结构体中使用的元件名称如果结构体中要进行参数的传递,那么component语句中需要类属参数说明--可选项;引用元件端口的说明,是已经设计好的实体端口名表;元件说明语句在architecture和begin之间。元件例化引用采用componet语句对要引用的原件进行说明后,为了引用的元件正确地嵌入到高一层的结构体描述中,就必须把被引用的元件端口信号于结构体中相应端口信号正确地连接起来,这就是元件例化语句要实现的功能。语法结构:标号名:元件名 generic map(参数映射) prot map(端口映射);其中标号:是元件例化语句的惟一标识,结构体中的标号名应该是惟一的generic map语句:它的功能是实现对参数的赋值操作,从而可以灵活地改变引用元件的参数,为可选项prot map:它的功能是把引用元件的端口信号与实际连接的信号对应起来,从而进行元件的引用操作。VHDL中,为了实现引用元件的端口信号与结构体中的实际信号相连接,往往采用两种映射方法:1、位置映射方法:指port map语句中实际信号的书写顺序于componet语句中端口说明的信号书写语句顺序一致2、名称映射方法:指在port map中将引用的元件的端口信号名称赋值给结构体中要使用例化元件的各个信号(名称映射语句的书写要求不是十分严格,只要把映射的对应信号连接起来就可以,顺序可以颠倒)。生成语句规则结构某些电路部分是由同类元件组成的阵列,这些同类元件叫规则结构,例如:随机RAM、只读ROM、移位寄存器等规则结构一般用生成语句来描述。生成语句有两种形式:for_generate和if_generatefor_generate主要用来描述规则if_generate主要用来描述结构在其端部表现出的不规则性,例如边界条件的特殊性for_generate语句标号:for 循环变量 in 离散范围 generate 并行处理语句; end generate 标号;标号:用来作为for_generate语句的唯一标识符,可选项;循环变量:它的值在每次循环中都将发生变化;离散范围:用来指定循环变量的取值范围,循环变量的取值将从取值范围最左边的值开始并且递增到取值范围的最右边,实际上限定了循环次数for_generate与for_loop语句很类似,但二者有区别。for_loop语句的循环体中的处理语句是顺序的,而for_generate语句中处理的语句是并行处理的,具有并发性。if_generate语句标号:if 条件 generate 并行处理语句;end generate 标号;if_generate语句是并行处理语句,其中不允许出现else子语句

用VHDL语言编写可逆向计数的计数器,要求如下:

已经仿真过,请放心使用!library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;entity Ctl_CNT is port ( clk: in STD_LOGIC; back: in STD_LOGIC; clr: in STD_LOGIC; rst: in STD_LOGIC; dis_h: out STD_LOGIC_VECTOR (6 downto 0); dis_l: out STD_LOGIC_VECTOR (6 downto 0) ); end Ctl_CNT;architecture Ctl_CNT_arch of Ctl_CNT issignal qh:std_logic_vector(3 downto 0);signal ql: std_logic_vector(3 downto 0);begin p1: process(back,rst,clr,clk) begin if clr"event and clr="1" then qh<="0000"; ql<="0000"; elsif rst"event and rst="1" then qh<="0110"; ql<="0110"; elsif clk"event and clk="1"then if back"event and back="1" then if ql="0000" then if qh="0000" then ql<="1001" ;qh<="1001"; else qh<=qh-"1"; end if; else ql<=ql-"1" ; end if ; else if ql="1001" then if qh="1001" then ql<="0000" ;qh<="0000"; else qh<=qh+"1"; end if; else ql<=ql+"1"; end if ; end if; end if; end process p1; p2:process(qh,ql) begin case qh is when"0000"=> dis_h<="0111111"; when"0001"=> dis_h<="0000110"; when"0010"=> dis_h<="1011011"; when"0011"=> dis_h<="1001111"; when"0100"=> dis_h<="1100110"; when"0101"=> dis_h<="1101101"; when"0110"=> dis_h<="1111101"; when"0111"=> dis_h<="0000111"; when"1000"=>dis_h<="1111111"; when"1001"=> dis_h<="1101111"; when others=>dis_h<="0000000"; end case; case ql is when"0000"=> dis_l<="0111111"; when"0001"=> dis_l<="0000110"; when"0010"=> dis_l<="1011011"; when"0011"=> dis_l<="1001111"; when"0100"=> dis_l<="1100110"; when"0101"=> dis_l<="1101101"; when"0110"=> dis_l<="1111101"; when"0111"=>dis_l<="0000111"; when"1000"=> dis_l<="1111111"; when"1001"=> dis_l<="1101111"; when others=> dis_l<="0000000"; end case;end process p2;end Ctl_CNT_arch;

VHDL语言中 BEGIN、END、IF、ELSE、ELSIF是怎么用的啊? 高手详解(通俗易懂)。谢谢!!!

begin时开始的意是,用在结构体中,进程下面也要有begin,end是结束的意思,实体,结构体及其他的语句都需要在尾端用END来结束,if,else,elsif都是顺序描述语句if语句里面单分支if语句 if 条件 then 顺序语句; end if;二分支if语句 if 条件 then 顺序语句; else 顺序语句; end if;多分支if语句 if 条件1 then 顺序语句; elsif 条件2 then 顺序语句; ...... else 顺序语句; end if;

VHDL语言是一种结构化设计语言,一个设计(电路模块)包括实体与结构体两部分,实体描述(),结构体描述()

器件的内部功能

用VHDL语言编程~急~

楼主我也想要啊!考试题啊!如果有的话可以给我吗?谢谢啦!邮箱272207312@qq.com

学习CPLD用vhdl和verilog哪种语言好

建议初学者学习Verilog,语法跟C语言很像,规则较为灵活,在国内用Verilog的较多一些。当然在选择学习什么语言的时候,建议你看看周围同学或同事都用什么语言,建议跟他们一致,这样有问题可以相互探讨,相互交流。也比较好合作。这点尤为重要,闭门造车学是很困难的。对于2种语言哪种较好,没有定论,其实都差不多的。

1987标准中对vhdl语言的标识符有哪些基本要求

包含52个拉丁字母(大写字母A~Z、小写字母a~z)、10个阿拉伯数字(0~9)、1个符号(下划线_);首个符号必须是拉丁字母,下划线的前后必须有拉丁字母或者阿拉伯数字;不区分大小写拉丁字母。

简述VHDL语言中变量和信号的不同之处。

【答案】:(1)使用场合不同:变量是局部量,只能用于进程、函数和过程语句中;信号是全局量,通常在实体、包和结构体中说明,并能在任何子结构体中使用,要在进程间或与子程序间交换信息时,必须使用信号。(2)赋值符号不同:变量使用赋值符号“:=”给变量赋值;信号使用代入符号“<=”给信号赋值。(3)赋值时间不同:变量的值在程序运行过程中可以改变,赋值后变量的值立即改变;信号的值在程序运行过程中即使执行到代入语句时,也不立即改变,而是在整个进程结束后才对信号赋值。

VHDL语言中,and和+有什么区别?xor代表加和吗?

and和+不一样的呀,就算可以用文字表示也应该是ADD吧- -。。XOR是异或的意思 1 xor 0=1 0 xor 1 = 1 1 xor 1=0 0 xor 0=0and 是与运算 只有 1 and 1=1 其他的都是0 就可以理解为相乘+的话 就不止限于0和1了 8+7也可以

关于VHDL语言中语句等效的问题!!

1.简单并行赋值语句:等效于于一条缩写的进程语句,因为语句中任何信号的变化都将启动相关并行语句的赋值操作。注意,赋值目标的数据对象必须是信号它的数据类型必须与赋值符号右边表达式的数据类型一致;2.条件信号赋值语句:等效于与进程中的IF 语句,在执行条件信号语句时每一赋值条件是按书写的先后关系逐项测定的一旦发现赋值条件= TRUE,立即将表达式的值赋给赋值目标变量;3.选择信号赋值语句:选择信号赋值语句本身不能在进程中应用,但其功能却与进程中的CASE 语句的功能相似; 后两者最大的区别是: 条件信号赋值语句=> 允许有条件重叠的现象; 选择信号赋值语句=> 不允许有条件重叠的现象;希望对你有所帮助。

请问:VHDL中二分频是怎么实现的

signal clk1 :std_logic;signal count1 :integer range 0 to 1;clk_div_proc:process(clk) begin if rising_edge(clk) then if count1=1 then count1<=0; clk1<="1"; else count1<=count1+1; clk1<="0"; end if; end if; end process clk_div_proc;

VHDL语言是什么性质的语言?

电子电路学到什么程度呢?VHDL的设计基础是数字电路,编程语言基础是C语言(或者其他高级语言),如果没有学习过编程语言就直接学VHDL的话较难上手,而且进步缓慢,要想用VHDL设计电路的话一定要对数字电路十分熟悉才能了解到VHDL设计的优势,建议楼主循序渐进较好

VHDL语言,乘法

跟小学乘法一样,个位是"1",直接加到ACC里面,是"0"则跳过;十位若是"1"则左移一位,然后加到ACC里面,是"0"就跳过,不管;类推,百位是"1",则左移两位,然后加到ACC,......DCBA*1010==> DCBA----------<=1+.....0000----------<=0+.......DCBA-------<=1+........0000--------<=0_____________=>DC[B+D][A+C]A ....观察,你会发现,乘数的各位控制着被乘数的有无,以及移位的位数。VHDL可以写成两种,【1】时序乘法;【2】硬件乘法。时序乘法耗费资源少,速度慢;硬件乘法速度快,耗费资源多。 硬件乘法的各个‘列"是一个带进位的累加器;其‘行"也是累加器,且其值要么是被乘数,要么是全‘0"。总体是一个矩阵加法器。载入乘数和被乘数,即刻得到‘积" ! 现代CPU的内部大概如此。32位乘法器用时序法,耗费资源很少,约32+32+64+64+6=198个寄存器单元;而硬件乘法则消耗大约32x32=1024+64=1088个寄存器单元(5倍)。

用VHDL语言写分频器

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fen isport( CLK:IN std_logic; PU1,PU2,PU3,PU4,PU5,PU6,PU7,PU8:OUT std_logic );end fen;architecture div of fen is signal Q:std_logic_vector(7 downto 0); begin process(CLK) begin if CLK"EVENT AND CLK="1" then if(Q="11111111")then Q<="00000000"; else Q<=Q+1; end if; end if; end process; PU1<=Q(0);--64Hz PU2<=Q(1);--32Hz PU3<=Q(2);--16Hz PU4<=Q(3);--8Hz PU5<=Q(4);--4Hz PU6<=Q(5);--2Hz PU7<=Q(6);--1Hz PU8<=Q(7);--0.5Hzend div; --好了~~~

VHDL电子时钟设计

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTC IS PORT(CLK,CLK0,R,BCD1WR,BCD10WR:IN STD_LOGIC; A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COUNTC;ARCHITECTURE ONE OF COUNTC ISSIGNAL BCD1N:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL BCD10N:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINP1:PROCESS(CLK,BCD1WR) BEGIN IF R="1" THEN BCD1N<="0000"; ELSIF BCD1WR="1" THEN BCD1N<=A; ELSIF CLK"EVENT AND CLK="1" THEN IF BCD1N="1001" THEN BCD1N<="0000"; ELSE BCD1N<=BCD1N+1; END IF;END IF;END PROCESS P1;P2:PROCESS(CLK,BCD10WR)BEGIN IF R="1" THEN BCD10N<="000";ELSIF BCD10WR="1" THEN BCD10N<=A(2 DOWNTO 0);ELSIF CLK"EVENT AND CLK = "1" THEN IF(BCD1N = "1001") THEN IF BCD10N="101" THEN BCD10N<="000"; ELSE BCD10N<=BCD10N+1; END IF; END IF; END IF;END PROCESS P2;P3:PROCESS(CLK0,BCD1N,BCD10N) BEGINIF CLK0 = "1" THENSEL <= "001";CASE BCD1N ISWHEN "0000"=>Y<="0111111";WHEN "0001"=>Y<="0000110";WHEN "0010"=>Y<="1011011";WHEN "0011"=>Y<="1001111";WHEN "0100"=>Y<="1100110";WHEN "0101"=>Y<="1101101";WHEN "0110"=>Y<="1111101";WHEN "0111"=>Y<="0000111";WHEN "1000"=>Y<="1111111";WHEN "1001"=>Y<="1101111";WHEN "1010"=>Y<="1110111";WHEN "1011"=>Y<="1111100";WHEN "1100"=>Y<="0111001";WHEN "1101"=>Y<="1011110";WHEN "1110"=>Y<="1111001";WHEN "1111"=>Y<="1110001";WHEN OTHERS => NULL;END CASE;ELSE SEL <="010";CASE BCD10N ISWHEN "000"=>Y<="0111111";WHEN "001"=>Y<="0000110";WHEN "010"=>Y<="1011011";WHEN "011"=>Y<="1001111";WHEN "100"=>Y<="1100110";WHEN "101"=>Y<="1101101";WHEN "110"=>Y<="1111101";WHEN "111"=>Y<="0000111";WHEN OTHERS => NULL;END CASE;END IF;END PROCESS P3;END ONE;

Verilog HDL和VHDL的区别是什么?

这两种语言都是用于数字电子系统设计的硬件描述语言,而且都已经是 IEEE 的标准。 VHDL 1987 年成为标准,而 Verilog 是 1995 年才成为标准的。这个是因为 VHDL 是美国军方组织开发的,而 Verilog 是一个公司的私有财产转化而来的。为什么 Verilog 能成为 IEEE 标准呢?它一定有其优越性才行,所以说 Verilog 有更强的生命力。 这两者有其共同的特点: 1. 能形式化地抽象表示电路的行为和结构; 2. 支持逻辑设计中层次与范围地描述; 3. 可借用高级语言地精巧结构来简化电路行为和结构;具有电路仿真与验证机制以保证设计的正确性; 4. 支持电路描述由高层到低层的综合转换; 5. 硬件描述和实现工艺无关; 6. 便于文档管理; 7. 易于理解和设计重用 但是两者也各有特点。 Verilog HDL 推出已经有 20 年了,拥有广泛的设计群体,成熟的资源也比 VHDL 丰富。 Verilog 更大的一个优势是:它非常容易掌握,只要有 C 语言的编程基础,通过比较短的时间,经过一些实际的操作,可以在 2 ~ 3 个月内掌握这种设计技术。而 VHDL 设计相对要难一点,这个是因为 VHDL 不是很直观,需要有 Ada 编程基础,一般认为至少要半年以上的专业培训才能掌握。 目前版本的 Verilog HDL 和 VHDL 在行为级抽象建模的覆盖面范围方面有所不同。一般认为 Verilog 在系统级抽象方面要比 VHDL 略差一些,而在门级开关电路描述方面要强的多。 近 10 年来, EDA 界一直在对数字逻辑设计中究竟用哪一种硬件描述语言争论不休,目前在美国,高层次数字系统设计领域中,应用 Verilog 和 VHDL 的比率是 80 %和 20 %;日本和台湾和美国差不多;而在欧洲 VHDL 发展的比较好。在中国很多集成电路设计公司都采用 Verilog

求vhdl里

<=是对信号进行赋值的赋值操作符,另外在关系运算中作为小于等于号使用;:=是对变量和常量进行赋值的赋值操作符,另外在声明信号、变量、常量的时候,可以用:=对其赋初值。

VHDL中"|"是什么意思

VHDL中"|"代表“或者”的意思。例如子句when "000"|"011"|"100"就表示case语句中表达式的值为"000"或者为"011"或者为"100"的时候。

VHDL代码解释

查查数字与系统这本书

VHDL并置语句

并置“&” 就是用来进行位和位矢量的连接运算 所谓位和位矢量的连接运算是指将并置操作符右边的内容接在左边的内容之后以形成一个新的位矢量.通常采用并置操作符进行连接的方式很多 : 既可以将两个位连接起来形成一个位矢量 , 也可以将两个位矢量连接起来以形成一个新的位矢量 , 还可以将位矢量和位连接起来形成一个新的矢量。例如: SIGNAL a, b:std_logic; SIGNAL c: std_logic_vector (1 DOWNTO 0); SIGNAL d, e: std_logic_vector (3 DOWNTO 0); SIGNAL f: std_logic_vector (5 DOWNTO 0); SIGNAL g: std_logic_vector (7 DOWN TO 0); c<=a & b; 两个位连接 f <= a & d; 位和一个位矢量连接

请教高手解析VHDL代码

不能直接输出cq1.因为她在结构中要被赋值。

vhdl不等于怎么写?

VHDL不等于的关系运算符为/=。

求助VHDL的连接符&的用法

你的左右值的位数是不是对的!7是不是对7

VHDL 16选1数据选择器 用case语句

LIBRARY IEEE;USE IEEE.Std_logic_1164.ALL;ENTITY mux_16_1 IS PORT(en: IN Std_logic; sel: IN Std_logic_vector(3 DOWNTO 0); in_signal: IN Std_logic_vector(15 DOWNTO 0); y: OUT Std_logic);END mux_16_1;ARCHITECTURE behavl_case OFmux_16_1 ISBEGINp_case: PROCESS(en, sel, in_signal)BEGIN IF en="1" THEN CASE sel IS WHEN "0000" => y <= in_signal(0); WHEN "0001" => y <= in_signal(1); WHEN "0010" => y <= in_signal(2); WHEN "0011" => y <= in_signal(3); WHEN "0100" => y <= in_signal(4); WHEN "0101" => y <= in_signal(5); WHEN "0110" => y <= in_signal(6); WHEN "0111" => y <= in_signal(7); WHEN "1000" => y <= in_signal(8); WHEN "1001" => y <= in_signal(9); WHEN "1010" => y <= in_signal(10); WHEN "1011" => y <= in_signal(11); WHEN "1100" => y <= in_signal(12); WHEN "1101" => y <= in_signal(13); WHEN "1110" => y <= in_signal(14); WHEN "1111" => y <= in_signal(15); WHEN OTHERS => y <= "Z"; END CASE; ELSE y <= "Z"; END IF;END PROCESS p_case;END behavl_case;

VHDL 数据赋值

早说了,变量不要放在PROCESS里面,开始定义的几个信号全放在ARCHITECTURE里,用SIGNALSIGNAL user_code:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL admin_code:STD_LOGIC_VECTOR(15 DOWNTO 0); SIGNAL t_code:STD_LOGIC_VECTOR(15 DOWNTO 0); PROCESS(....)t_code <= admin_code;END PROCESSVHDL是强类型语言!不要写乱七八ZAO的语法.在里面只能按照以下方式,下面是一个计数器的程序.看到没有?开始一块写ENTITY.然后ARCH.再定义SIGNAL,下面写PROCESS和组合逻辑,什么变量定义,不要出现在这里面,那是用在TESTBENCH上面的,这里不要定义.UNDERSTAND?像SIGNAL在电路生成中,他可能是寄存器,可能是信号.但你定义个变量,生成电路那是什么?那不是个具体东西,只是个抽象化的概念,所以不能写的.你现在写RTL就按照下面的格式做.library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;entity cnt16 is port( clk : in std_logic; reset : in std_logic; clear : in std_logic; cnt_en : in std_logic; cnt_out : out std_logic_vector(3 downto 0) );end cnt16;architecture RTL of cnt16 issignal cnt_out_reg : std_logic_vector(3 downto 0);begin process(clk, reset) begin -- Asynchronous Reset if (reset = "1") then cnt_out_reg <= "0000"; -- Synchronous operation elsif (clk"event and clk = "1") then -- Synchronous clear if (clear = "1") then cnt_out_reg <= "0000"; -- Synchronous Enable elsif (cnt_en = "1") then cnt_out_reg <= cnt_out_reg + 1; end if; end if; end process; cnt_out <= cnt_out_reg;end RTL;

vhdl综合器是什么

它的作用就是将你写的程序,跟硬件联合起来仿真的!!

VHDL难学吗

还行吧,个人觉得,不过建议你最好去学学verilog HDL 上手快,使用的也多一些

用VHDL实现分频

最近好多人问分频的问题啊。50MHz到1KHz,做一个25000的计数器,计数清零的时候让输出反向,这样就使频率除以50000.语句为:process(cp)beginif cp"event and cp="1" then if q="xxxxxxxxxxx“ --25000的二进制形式 q<="00000000" --确保q的位数相等 cp_out<=not cp_out; --cp_out就是输出。 else q<=q+1; end ifend if;把上面的xxxxxxxx分别设为25000、25、4、10做成50000、50、8、20分频的分频器,50MHz50000分频为1KHz,1KHz25分频成20Hz,20Hz分别进行8、20分频成2.5Hz和1Hz。抛砖引玉,具体程序你自己就可以写了。注意文件开头要写:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;否则可能要报错哦。希望能采纳。

如何用VHDL语言编程基本RS触发器……

根据真值表的描述结合VHDL编程思想很好实现你想要的程序;程序并不难,关键是你用心的程度;我猜你也许也是一名我的同行……自己的努力才是过硬的本领!!!!LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY RS_clk ISPORT( S,R,res :IN std_logic;Q,NOT_Q:out std_logic);END RS_clk;ARCHITECTURE behav OF RS_clk ISsignal sel1,sel2: std_logic;BEGINprocess(res,sel1,sel2)beginif res="0" then sel1<="0";sel2<="1";elsif (S="1" and R="0") then sel1<="1";sel2<="0";elsif (S="0" and R="1") then sel1<="0";sel2<="1";elsif (S="0" and R="0") then sel1<=sel1; sel2<=sel2;end if;Q<=sel1;NOT_Q<=sel2;end process;END behav;

vhdl语言中的数组如何定义和使用?

typeaisarray(3downto0)ofstd_logic;以上定义了一个8值逻辑的位宽为4的一维数组类型a。调用:signalb:ina;

vhdl语言和汇编语言

楼主没有弄明白概念,汇编虽然低级,但它仍然是软件,运行在某一硬件上而不会对硬件有任何影响。但VHDL是硬件描述语言,它写出来的代码是描述一个硬件是什么样子的,由什么门电路组成,最后代码综合出来的电路可以在FPGA中仿真或者真正制作成一个芯片出来。打个小比方:楼主先用VHDL语言设计了一个CPU出来,当然这个CPU的架构、指令集什么的也都在这个时候确定了,然后楼主把你的设计拿到芯片制造厂做成了真正的CPU。这个CPU到手以后,楼主就可以写汇编程序在它上面运行了。PS:VHDL语言与高级语言如C倒有几分相似,但与汇编相差甚远。

VHDL程序的基本组成部分有哪些?各自的作用是什么?各个部分有哪些规定?

实体,结构体,库,程序包,配置1、实体:用于描述所设计系统的外部接口特性;即该设计实体对外的输入、输出端口数量和端口特性。2、结构体:用于描述实体所代表的系统内部的结构和行为;它描述设计实体的结构、行为、元件及内部连接关系。3、库:存放已经编译的实体、构造体、程序包集合和配置。4、程序包:存放各设计模块可以共享的数据类型、常数、子程序库。5、配置;实体对应多个结构体时,从与某个实体对应的多个结构体中选定一个作为具体实现。

学习VHDL有哪些比较好的书籍?

[转的]我是FPGA方面的新手, 刚学了VHDL,看了几本书, 在看的时候比较了各书的优缺点, 现在将我的体会奉献给还没入门的朋友们, 希望大家在选书方面少走弯路 - 对初学者来说, 选一本好书可以事半功倍.我总共买/借了以下几本书:书1) VHDL硬件描述语言与数字逻辑电路设计(修订版), 西电出版社, 候伯亨书2) VHDL实用教程,电子科大出版社, 潘松书3) VHDL与数字电路设计, 科学出版社, 卢毅书4) VHDL入门/解惑/经典实例/经验总结, 北航出版社, 黄任书评如下(个人意见, 仅供参考) :书1) 不敢妄评, 因为没看懂. 虽然这本书算是国内VHDL书中的"名牌", 但是似乎并不适合初学者. 我自认理解能力还行, 可是这本书却让我觉得一头雾水, 而且其语言和书的结构都有点死板, 让我没有想往下读的感觉. 因为不推荐给初学者.书2) 好书. 适合作"第二本书"读. 用来入门的话, 门槛似乎过高. 但推荐各位初学者买一本备查.书3) 适合入门. 但是有些问题没讲明白, 特别是"可综合"与"可仿真"语句的区别等等. 书4) 我觉得此书是四本书当中最好的入门书, 最适合初学者. 下面是我看这本书的一些体会:首先, 这本书继承了卢毅那本书的易读性和循序渐进的教学手法. 正如作者在前言里说的"虽然无法做到老妪能懂, 但对有一定数字设计基础的读者来说是浅显易懂的". 其次, 这本书所教授的, 全部是"可综合的"VHDL语句. 这对我这种主要用VHDL开发FPGA的读者来说, 真是最适合不过了. **但对那些想用VHDL进行高阶建模的人来说, 可能并不合适**. 而且它有整整一章(虽然不过10页)对VHDL的可综合性进行讨论, 这章是一个十分有有益的总结, 至少让我搞清楚了不少之前在FPGA开发中遇到的问题. 第三, 这本书实例相当多, 而且都实际可综合! (我试着输入一个比较大的程序, 居然一次编译通过, 没有错误! 很多书上的程序都是不可直接运行的, 本书是个例外, 难能可贵)最后, 这本书是这四本书里最便宜的.^_^ (俺是穷学生, 其它的书都是借的, 只买得起这本书). 综上所述, 我郑重向初学者推荐两本书:第一本: VHDL入门/解惑/经典实例/经验总结(黄任)第二本: VHDL 实用教程(潘松)只此二书, 即可入门. 至于入门后, 想要提升到中级或是高级的水平, 我想恐怕只有多做实际的系统了. 因为我自认没到中级水平, 所以没资格向各位推荐书籍.

在VHDL中 # 什么意思 ctrl_addr = 16#000#

ctrl_addr是十六进制的000,例如二进制的0111_0011_0001表示成十六进制为:16#731#,在两个#号之间是十六进制数

vhdl 语言中如何使用移位指令

建议你去看书,看EDA最基本的书
 1 2  下一页  尾页