微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA HDL语言设计入门实例

FPGA HDL语言设计入门实例

时间:10-02 整理:3721RD 点击:

【例3-1】 2选1多路选择器程序。                                (P31)

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-28320.png

LIBRARY IEEE;                                    --IEEE库使用说明语句

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY mux21 IS                                   --实体说明部分

        PORT(

                a,b :  IN STD_LOGIC;

                s:   IN STD_LOGIC;

                y:   OUT  STD_LOGIC

                );

END ENTITY mux21;

ARCHITECTURE mux21a OF mux21 IS               --结构体说明部分

        BEGIN

                PROCESS(a,b,s)

                        BEGIN

                                IF s='0' THEN y = 20 ) ;  -- 该表达式是布尔表达式

                  END PROCESS  cwait5 ;

END  behavioral ;

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-31508.png

【例4-6】 多条件WAIT语句的示例程序。                                (P68)

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-4647.png

cwait6 : PROCESS

                  BEGIN

                          M

                          --  多条件WAIT语句

                     WAIT ON data0, data1,q  UNTIL((temp + 5 ) >= 20) FOR  34 ns ;

                  END PROCESS  cwait6 ;

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-2717.png

【例4-7】 信号代入语句示例程序。                                        (P68)

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-24987.png

ARCHITECTURE behavioral OF example_dairu IS

SIGNAL  a, b, c, d,e, f : STD_LOGIC ;

SIGNAL  temp0, temp1, temp2, temp3, temp4, temp5 : STD_LOGIC ;

BEGIN

cdairu : PROCESS

                  BEGIN

                          temp0 <=  a  NAND  b ;    -- 与非

                          temp1 <=  c  NOR   d ;     -- 或非

                          temp2 <=  e  XOR   f  AFTER  5 ns ;     -- 异或门延迟

                          temp3 <=  ( a  NAND  b )  NOR  ( c  NAND  d ) ;

                          temp4 <=  ( c  OR  d )  NAND  ( e  OR  f ) ;

                          temp5 <=  a  XOR  b  XOR  c  XOR  d  XOR  e  XOR  f  ;

                  END PROCESS  cdairu ;

END  behavioral ;

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-28462.png

【例4-8】 变量赋值语句示例程序。                                (P69)

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-21440.png

ARCHITECTURE behavioral OF example_fuzhi IS

CONSTANT  cvolt : REAL : = 3.3 ;     -- 定义常数

CONSTANT  ccurrent : REAL : = 4.0 ;

VARIABLE  temp0, temp1 : REAL ;    -- 定义变量

VARIABLE  temp2, temp3 : INTEGER  RANGE  0  TO  255 : =  10 ;

VARIABLE  temp4 : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;

VARIABLE  temp5 : STD_LOGIC ;

SIGNAL a  : STD_LOGIC ;           -- 定义信号

SIGNAL b  : REAL ;

SIGNAL c  : INTEGER ;

SIGNAL d  : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;

BEGIN

cfuzhi : PROCESS

                  BEGIN

                          temp0 : =  cvolt ;        -- 变量直接赋值

                          temp1 : =  ( cvolt + 1.8 ) * ccurrent ;     -- 变量表达式赋值

                          temp2 : =  c + 78 ;

                          temp3 : =  c / 5 ;        -- 此时c必须是5的倍数

                          temp4 : =  d ;

                          temp5 : =  temp4 ( 2 )  ;

                  END PROCESS  cfuzhi ;

END  behavioral ;

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-28506.png

【例4-9】 变量赋值和信号量代入的对比示例程序。                        (P69)

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-11530.png

ARCHITECTURE behavioral OF example_duibi IS

SIGNAL  d0, d1, d2, d3  : STD_LOGIC ;     -- 定义信号

SIGNAL  q0, q1        : STD_LOGIC ;

BEGIN

cduibi_1 :PROCESS (d0, d1, d2, d3 )

                  BEGIN

                          d2  <=  d0 ;        -- 信号量代入

                          q0  <=  d2  OR  d3 ;

                          d2  <=  d1 ;        -- 信号量代入

                          q1  <=  d2  OR  d3 ;

                  END PROCESS  cduibi_1 ;

cduibi_2 : PROCESS (d0, d1, d3 )

           VARIABLE  m2 : STD_LOGIC ;

                  BEGIN

                          m2  : =  d0 ;        -- 变量赋值

                          q0  <=  m2  OR  d3 ;

                          m2  : =  d1 ;        -- 变量赋值

                          q1  <=  m2  OR  d3 ;

                  END PROCESS  cduibi_2 ;

END  behavioral ;

进程cduibi_1的运行结果:

q0 = d1 OR d3  并且  q1 = d1 OR d3

进程cduibi_2的运行结果:

q0 = d0 OR d3  而  q1 = d1 OR d3

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-15662.png

【例4-10】 采用单IF语句来描述D触发器的示例程序。                                (P71)

file:///C:\Users\wzy\AppData\Local\Temp\ksohtml\wps_clip_image-281.png

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY cdff1 IS

                PORT( d  : IN STD_LOGIC ;

           clk : IN STD_LOGIC ;

            q : OUT STD_LOGIC ;

            qnot : OUT STD_LOGIC ) ;

END cdff1 ;

ARCHITECTURE dataflow OF cdff1 IS

BEGIN

cdff_example : PROCESS ( clk )

            BEGIN

                    IF ( clk'EVENT  AND  clk = '1' )  THEN  -- 单IF语句

                    q  <=  d ;

                    qnot  <=  NOT d ;

              END IF ;

          END PROCESS  cdff_example ;

END  dataflow ;


EP4CE6E22C8N
http://redirect.simba.taobao.com/rd?w=unionnojs&f=http%3A%2F%2Fre.taobao.com%2Feauction%3Fe%3DgoZkOBVPhbvebLdhAWchHDLwfTWbGSOTvDQl%252FsD9dZuLltG5xFicOSZqewpHPyZzWFp1PMcy6Qyfhi%252BjTOUzNfRHn82V7C%252B01UGFCTlGxNeB3ujUJI0OeA%253D%253D%26ptype%3D100010&k=e2e107a2b72ca1b1&c=un&b=alimm_0&p=mm_51454259_5300107_15952998

菜鸟学习了,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top