这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » VHDL常用代码

共1条 1/1 1 跳转至

VHDL常用代码

菜鸟
2017-06-29 14:15:10     打赏
最近读了许多VHDL代码,虽然没有系统的学过,但还是能看懂,把常用的贴着,部分还是能结合verilog理解。



常用的头:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;



顶层文件结构:

--这部分相当于verilog中的module模块端口声明---------------

ENTITY top IS

PORT(

CLKIN:
IN STD_LOGIC;

...

LED:
OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

);

END top;



--接下来是ARCHITECTURE部分,顶层模块分几个元件----

ARCHITECTURE rtl of top IS 

COMPONENT a

PORT(

CLKIN:
IN STD_LOGIC;

...

);

END COMPONENT;



COMPONENT b

PORT(

...

);

END COMPONENT;



--常数说明,相当于Verilog中的parameter------------------------

CONSTANT VCC  :STD_LOGIC := '1';



--信号说明,相当于verilog中的reg----------------------------------

SIGNAL VCC_CON : STD_LOGIC;

SIGNAL SL : STD_LOGIC_VECTOR(3 DOWNTO 0);



--元件例化,相当于verilog中的模块调用和端口映射-----------

BEGIN

--模块实例名 :模块名

ADJUST_CONTROL: adjuster

PORT MAP(

自身端口名 => 连接端口名,

自身端口名 => 连接端口名,

...

);


SEC_CONTROL: counter60

PORT MAP(

...

);



--最后结束结构体------------------------------------------------------

END rtl;



一般非顶层文件的结构:

--库

--ENTITY声明

--ARCHITECTUREK开始

--声明CONSTANT/SIGNAL

--开始进程

BEGIN

--多个并列的process相当于verilog中的always,是并行的--

LOW_PROCROCESS(CLKIN,EN)

BEGIN

IF rising_edge(CLKIN) THEN

...

END IF;

END PROCESS;



HIGH_PROCROCESS(CLKIN,EN)

BEGIN

...

END PROCESS;



--穿插着一些赋值语句----------------------------------------------

--这些语句相当于verilog中的assign,输出缓冲的风格-----

LOW <= LOW_REG;

HIGH <= HIGH_REG;



--最后结束结构体----------------------------------------------------



CASE结构(用于状态机,多路选择等):

sel_stateROCESS(reset,clk)

BEGIN

IF reset = ‘0’ THEN

state <= Idle;

...

ELSEIF rising_edge(clk) THEN

CASE state IS

WHEN led1
=>

q <= ..;

state <= led2;


WHEN led2
=>

q <= ..;

state <= led3;


WHEN led3
=>

q <= ..;

state <= led4;

...

END CASE;

END PROCESS;


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]