【FPGA开发】Libero demo的搭建[1] --LED bilink实现
本篇将完整的完成一个FPGA搭建的demo,我们通过FPGA来实现LED的闪烁设计,初次之外根据板卡的原理图,该流程还涉及一个上电自锁的过程,我们这个demo实现这两个功能
该文章的目的主要在实现libero使用的熟练度。
仅用于自己总结,部分图来自于:
基于SmartFusion2系列FPGA SOC的开发2——UART串口使用-CSDN博客
任务:
1. LED闪烁
2. 开机键上电自锁
1. 如何创建工程
1.1 打开软件点击
Project > New Project
输入工程名称,工程存放位置,工程偏好HDL语言类型
1.2 工程设置
点击上一步的next
工程中选择自己对应的SF2芯片,对应的速度和核心电压可以筛选出自己对应的芯片类型
1.3 器件选择配置
上一步用于使用ILA(vivado动态分析仪的选项)
底下这部根据实际原理图上PLL的供电来选择
比如这里是3.3V,时钟PLL选用3.3V,因此这里选择3.3V
1.4 MCU MSS配置
不需要MCU,只是用FPGA可以选用NONE选项,若是要用到arm核部分,则这个时候要选用第三个选项。(本次因为没用到mss,因此选择none)
2. 如何使用smart design
2.1 点击create smart design
就可以创建一个块设计模块(类比于vivado的block design)
2.2 加入ip
对于hdl代码的ip核:
先导入自己的hdl代码,之后会出现在这里
写完保存hdl代码之后不要忘记点击左上角的“Build Hierarchy” 之后才能拖进block design
对于系统内的ip核:
在这里选择对应的IP核心
2.3 引脚的连接
我最后demo的连线如下:
这里选用了系统的时钟模块和复位模块
在smart design里面右键可以生成port(input和output)
完成以上内容之后点击:
”generate component“用于生成对应IP器件
在这里要把对应的SD文件"set as root"
完成以上步骤之后:
点击综合"Synthesize"
3. 如何进行引脚约束:
3.1 如何进入引脚约束界面
综合结束之后才能操作
3.2 进行引脚约束
点击Edit按键进入引脚约束图形化界面,当然也可以直接用.pdc文件来直接实现。
之后根据原理图连接对应的引脚
我的连接如下,大家根据自己的板卡自由选择
4. 编译操作
4.1 生成比特流文件
这里预设前面都没有问题,因此可以直接点击generate bitstream进行比特流文件的生成
4.2 烧录比特流文件
连接好flash pro之后进行烧录操作,就可以等待烧录到板卡的fpga中去了
4.3 导出比特流文件
这里用于使用flash pro express烧录的情况,可以在其中选择自己需要的烧录格式
完成以上步骤就实现我们对应的led闪烁的步骤了!
5. 代码
以下附上我的verilog代码供大家参考:
///
// Company: <Name>
//
// File: led_blink.v
// File history:
// <Revision number>: <Date>: <Comments>
// <Revision number>: <Date>: <Comments>
// <Revision number>: <Date>: <Comments>
//
// Description:
//
// <Description here>
//
// Targeted device: <Family::SmartFusion2> <Die::M2S005> <Package::484 FBGA>
// Author: <Name>
//
///
//`timescale <time_units> / <precision>
module led_blink(
input i_clk,
input i_rst_n,
input i_on_off_button,
output wire o_led,
output wire o_on_off
);
reg led;
reg on_off;
assign o_led = led;
assign o_on_off = on_off;
reg [63:0] cnt_led;
reg [63:0] cnt_button;
//led blink
always@(posedge i_clk or negedge i_rst_n)
begin
if(i_rst_n == 1'b0) begin
led <= 'b1;
cnt_led <= 'd0;
end
else begin
if(cnt_led == 'd9999999) begin
led <= ~led;
cnt_led <= 'd0;
end
else begin
led <= led;
cnt_led <= cnt_led + 1'b1;
end
end
end
//self latch
always@(posedge i_clk or negedge i_rst_n)
begin
if(i_rst_n == 1'b0) begin
on_off <= 1'b0;
cnt_button <= 'd0;
end
else begin
if(cnt_button == 'd9999) begin
on_off <= 1'b1;
cnt_button <= 'd0;
end
else begin
if(i_on_off_button == 1'b1) begin
cnt_button <= cnt_button + 1'b1;
end
end
end
end
//<statements>
endmodule
原文地址:https://blog.csdn.net/Gatsby2023/article/details/142380753
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!