13回答

1收藏

让FPGA跑起来

FPGA/DSP FPGA/DSP 5933 人阅读 | 13 人回复 | 2013-07-08

从流水灯开始

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


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

Num1 建工程
File—New Project w…


选择存储路径,第二行输入工程名字(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
然后在下图的空白处双击,



点击




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

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

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




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



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

使用道具 举报

回答|共 13 个

倒序浏览

沙发

GY@艳

发表于 2013-7-8 11:10:12 | 只看该作者

先沙发,再品文
爱板  爱板  爱板     https://www.cirmall.com
板凳

Hayasaky

发表于 2013-7-8 12:07:50 | 只看该作者

呵呵,虽然还不会FPGA,但是来帮顶了
地板

nemon

发表于 2013-7-9 09:51:28 | 只看该作者

走过路过,不能错过……
5#

KdianC

发表于 2013-7-9 11:29:40 | 只看该作者

最近要用FPGA做东西,先看看多收集资料
6#

zada小明

发表于 2013-7-9 13:43:28 | 只看该作者

KdianC 发表于 2013-7-9 11:29
最近要用FPGA做东西,先看看多收集资料

希望对你有帮助
7#

五哥

发表于 2013-7-11 12:43:20 | 只看该作者

听说回复可以得铜板。
8#

zada小明

发表于 2013-7-12 10:48:41 | 只看该作者

xuwu_19911119 发表于 2013-7-11 12:43
听说回复可以得铜板。

这个是真的,不需要听说
9#

阿KUN

发表于 2013-7-24 11:20:37 | 只看该作者

看看,学习了
10#

zada小明

发表于 2013-7-25 09:37:24 | 只看该作者

此人较为厉害 发表于 2013-7-24 11:20
看看,学习了

互相学习                    
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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