OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8933|回复: 8

【FPGA学习】我的Verilog HDL记录 (持续更新)

[复制链接]

14

主题

58

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2014-1-24
在线时间
2 小时
发表于 2014-4-7 23:56:58 | 显示全部楼层 |阅读模式
先总结一下工程创建、管脚分配、代码下载相关注意事项
1.先建立一个文件夹,再在文件夹里面建立一个RTL文件夹用来保存.v文件(程序源文件),注意文件夹的名字最好都要相同(工程名、顶层实体名都要相同)

2.file->New Project Wizard->next->选择保存位置->工程命名(顶层实体名)->next->next->选择芯片家族->选择芯片具体型号->next->next->finish(至此工程已经建立)

3.在RTL文件夹里面新建一个.v文件,编写相应代码并且保存。鼠标放在工程名源文件上,左键->setting->浏览选择需要添加的文件->单击add->OK(至此源文件文件已经添加到工程)

4.全编译一次

5.管脚分配:菜单栏Assignments->pin planner->左键将需要配置的管脚拖到芯片的相应管脚上面->关掉配置界面(也可以通过编写脚本的方式进行管脚分配)


6.全编译一次

7.下载:JTAG模式:单击工具栏中下载图标->在下载模式mode中选择JTAG->Add file->选择需要下载的.sof文件-.单击start开始              下载

          AS模式:先生成.pof文件->鼠标放在工程管理文件上->Device->单击界面上的Device and Pin Options->勾上use                       configuration  device->选择EPCS4(视芯片型号)->OK->OK->全编译一次便生成.pof文件(只用于AS下载模式)


下面贴出八位流水灯Verilog代码:
 
module LED ( 
            //input 
            sys_clk        ,
            sys_rst_n      ,
            //output 
              LED
              );

//input ports

input                    sys_clk             ;    //system clock;
input                    sys_rst_n           ;    //system reset, low is active;

//output ports
output [WIDTH-1:0]       LED                 ;

//reg define 
reg    [SIZE-1:0]        counter             ;
reg    [WIDTH2-1:0]      count               ;

reg    [WIDTH-1:0]       LED                 ;

//wire define 


//parameter define 
parameter WIDTH = 8;
parameter SIZE  = 8;

parameter WIDTH2 = 18;

parameter Para = 100000;

/*******************************************************************************************************
**                              Main Program    
**  
********************************************************************************************************/

always @(posedge sys_clk or negedge sys_rst_n) begin 
        if (sys_rst_n ==1'b0) begin 
            count <= 'b0;
        end
        else  
            count  <= count + 1'b1;
end

always @(posedge sys_clk or negedge sys_rst_n) begin 
        if (sys_rst_n ==1'b0) begin 
            counter <= 8'b0;
        end
        else if ( count == Para) 
            counter  <= counter + 1'b1;
end

always @(posedge sys_clk or negedge sys_rst_n) begin 
        if (sys_rst_n ==1'b0) begin 
            LED <= 8'b0;
        end
        else begin
            case (counter) 
                 10     : LED = 8'b10000000   ;
                 20     : LED = 8'b01000000   ;
                 30     : LED = 8'b00100000   ;
                 40     : LED = 8'b00010000   ;
                 50     : LED = 8'b00001000   ;
                 60     : LED = 8'b00000100   ;
                 70     : LED = 8'b00000010   ;
                 80     : LED = 8'b00000001   ;   
                 default: LED = 8'b00000000   ;   
            endcase
        end          
end


endmodule


生成的电路


下次继续更新、、、


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2014-4-8 00:56:30 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

58

主题

499

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1920
金钱
1920
注册时间
2013-11-18
在线时间
268 小时
发表于 2014-4-8 12:16:53 | 显示全部楼层
sys_rst_n ==1'b0可以直接写成!sys_rst_n,输入时钟最好注释下频率
已经放下多年的FPGA,要重新再拾起来,却是如此的陌生
回复 支持 反对

使用道具 举报

14

主题

58

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2014-1-24
在线时间
2 小时
 楼主| 发表于 2014-4-10 12:58:17 | 显示全部楼层

74HC85数值比较器

  Verilog HDL源代码

 

module compare4(

input       [3:0] a_in, // 第一个4位比较值

input       [3:0] b_in, // 第二个4位比较值

input       [2:0] i_in, // 扩展输入端

 

output  reg [2:0] f_out      // 比较结果输出端

);

 

//******************************************************************************

//  模块名称:4位比较器模块

//  功能描述:完成4位比较器的功能

//******************************************************************************

always@( a_in or b_in or i_in ) begin

    if ( a_in > b_in )

      f_out = 3'b100; // 输出a大于b

    else if( a_in < b_in )

       f_out = 3'b010; // 输出a小于b

    else begin

         case( i_in )

         3'b000:

                  f_out = 3'b110;

         3'b010:

         f_out = 3'b010; // 输出a小于b

         3'b100:

         f_out = 3'b100; // 输出a大于b

         3'b110:

                  f_out = 3'b000;

         default:

         f_out = 3'b001;     // 输出a等于b

         endcase

    end

end
endmodule  



   生成的电路

        








回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165186
金钱
165186
注册时间
2010-12-1
在线时间
2106 小时
发表于 2014-4-10 14:24:24 | 显示全部楼层
回复【4楼】Chash:
---------------------------------
楼主又更新了,不错
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

58

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2014-1-24
在线时间
2 小时
 楼主| 发表于 2014-4-10 22:52:33 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
呵呵,借论坛宝地记个笔记,做个总结,FPGA这东西,在学校里面只求入个门,学一下Verilog HDL  ,把它当成一个单片机来学觉得好浪费资源。
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-4-7
在线时间
1 小时
发表于 2014-4-17 08:15:32 | 显示全部楼层
刚开始学习这方面,谢谢分享。
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2013-1-11
在线时间
12 小时
发表于 2014-9-17 09:18:44 | 显示全部楼层
楼主更新的不勤快啊,,,,
回复 支持 反对

使用道具 举报

31

主题

270

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2012-5-18
在线时间
6 小时
发表于 2014-9-17 12:20:33 | 显示全部楼层
谢 谢分享。
谁来买我的火柴.....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-9-30 06:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表