查看: 4759|回复: 13

让FPGA跑起来

[复制链接]
  • TA的每日心情
    擦汗
    2014-2-12 10:49
  • 签到天数: 150 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-7-8 11:04:45 | 显示全部楼层 |阅读模式
    分享到:
    从流水灯开始

    背景说明:我采用的是quarteus9.1,也就是最后一个自带仿真组件的版本

    1.jpg

    从QuartusII11.0之后的版本,可以显示中文字符,同时又能也能输入中文了,有点想换了,但这个还是算了吧O(∩_∩)O(关于Quarteus的安装破解直接掠过了,大家自行度娘。下载的话我觉得直接官网最靠谱,附上官网www.altera.com.cn)

    Num1 建工程
    File—New Project w…

    2.png

    选择存储路径,第二行输入工程名字(E文的呀)
    File-new(或者Ctrl+N)----verilog HDL File—输入语言设计
    在此个例子中,我们要先分析流水灯需要有几个小模块组成。在我的开发板中的FPGA的时钟输入是50MHz,但是流水灯的闪烁频率大约是在10Hz,因此需要有分频的模块。另一个模块就是控制流水灯的模块。
    下面是第一个分频模块。记得以前看过,在fpga内部,尽量设置少的时钟,否则会形成fpga内部始终满天飞,影响布局和布线。此处设计成为使能信号~
    module clk_design
    (
         input clk,
         input rst_n,
         output led_en
    );
    reg [22:0] cnt;
    parameter LED_CNT= 49999999;
    always@(posedgeclkornegedgerst_n)
      begin
         if(!rst_n)
            cnt<=23'd0;
         else if (cnt< LED_CNT)
                    cnt<=cnt+ 1'b1;
              else
                    cnt<=23'd0;
      end
    assign led_en= (cnt==23'd49_99999) ? 1'b1: 1'b0;
    endmodule
    在此部分设计中,讲50M时钟分频到10Hz使能信号,当计数到49999999时,给出一个时钟周期高电平,然后重新计数。(在设计中,一般模块都具有复位信号,用于模块的复位)。
    第二个模块 流水灯控制模块,此部分用了case语句,实现的逐一点亮,一起熄灭的设计。
    module led_display
    (
           input clk,
           input rst_n,
           input led_en,
           output reg [5:0]led_data
    );
    reg [5:0] num;
    always@(posedge clk or negedge rst_n)
      begin
           if(!rst_n)
               num<=6'b0;
           else if(led_en)
                    if (num<6'b000110)
                      num<=num+ 1'b1;
                    else
                      num<=1'b0;
                else
                    num<=num;
      end
    always@(posedge clk )
      begin
         case(num)
                           6'b000000: begin    led_data<=6'b000000;     end
                           6'b000001: begin     led_data<=6'b000001;     end
                           6'b000010: begin    led_data<=6'b000011;     end
                           6'b000011: begin    led_data<=6'b000111;     end
                           6'b000100: begin    led_data<=6'b001111;     end
                           6'b000101: begin    led_data<=6'b011111;     end
                           6'b000110: begin    led_data<=6'b111111;     end
                           default: begin    led_data<=6'b111111;     end
                         endcase
      end     
    endmodule
    接下来就是设计顶层文件,顶层文件我之前一直都是基于原理图输入的,在特权的书中发现,原理图在大型工程中,不适合,就开始学习原件的例化,用文本输入的。
    module first
    (
           input clk,
           input rst_n, //global clock reset
           output [5:0]led_data//user ledi IO
    );
    //----generater clock 10Hz
    wire led_en;
    clk_design clk_design_inst
    (
           .clk (clk),
           .rst_n (rst_n),
           .led_en (led_en)
    );
    //---set the display mode
    led_display led_display_inst
    (
           .clk (clk),
           .rst_n (rst_n),
           .led_en (led_en),
           .led_data (led_data)
    );
    Endmodule
    这样一学,其实原件例化并没有那么复杂的嘛!
    以上就是整个设计过程,设计之后,随之而来的就是仿真验证,9.1版本戴有仿真组件,因此就可以直接在一个软件下搞定。(不过这几天有些纠结,新东西总归是要接受的,因此也下载了11.0版本,接下来时间允许可能将9.1替换掉)
    下面是步骤:
    File-new(或者Ctrl+N)----Vector Waveform File
    然后在下图的空白处双击,

    3.jpg


    点击
    4.png


    5.jpg


    在Filter中,可以选择要显示的类型,我一般是选择Pins:all和Registers:,在左侧框中,双击自己想要观察的管脚就可以了。

    接下来是设置时钟输入频率(在实际仿真过程中,因为clk产生使能信号周期太长了,仿真时可以减小些,方便观察。个人想法,应该没有问题吧?)。最后完成时钟设置后就是保存+仿真。

    点击菜单栏中的Processing—》Simulator tool


    6.jpg


    1可以选择功能仿真或者时序仿真(功能仿真需要生成Netlist,也就是要点击一下后侧的按键),然后确保4处是你要仿真的文件,点击2,提示仿真成功后,点击3,即可以看到你的仿真结果了。如下图:

    7.jpg


    到此处,一个整体的流程就算是结束了,包括了设计输入和仿真。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-7-8 11:10:12 | 显示全部楼层
    先沙发,再品文
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-1-12 22:37
  • 签到天数: 259 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-7-8 12:07:50 | 显示全部楼层
    呵呵,虽然还不会FPGA,但是来帮顶了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    23 小时前
  • 签到天数: 1626 天

    连续签到: 4 天

    [LV.Master]伴坛终老

    发表于 2013-7-9 09:51:28 | 显示全部楼层
    走过路过,不能错过……
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-4-27 13:14
  • 签到天数: 104 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-7-9 11:29:40 | 显示全部楼层
    最近要用FPGA做东西,先看看多收集资料
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-2-12 10:49
  • 签到天数: 150 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-7-9 13:43:28 | 显示全部楼层
    KdianC 发表于 2013-7-9 11:29
    最近要用FPGA做东西,先看看多收集资料

    希望对你有帮助
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-24 12:35
  • 签到天数: 26 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-7-11 12:43:20 | 显示全部楼层
    听说回复可以得铜板。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-2-12 10:49
  • 签到天数: 150 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-7-12 10:48:41 | 显示全部楼层
    xuwu_19911119 发表于 2013-7-11 12:43
    听说回复可以得铜板。

    这个是真的,不需要听说
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-6-10 09:23
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-7-24 11:20:37 | 显示全部楼层
    看看,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-2-12 10:49
  • 签到天数: 150 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2013-7-25 09:37:24 | 显示全部楼层
    此人较为厉害 发表于 2013-7-24 11:20
    看看,学习了

    互相学习                    
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 23:56 , Processed in 0.191039 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.