点亮LED灯就是软件中的hello world!任务:用libero集成开发环境建立一个示例工程,让一个LED以500ms的频率闪烁。


3. 选择芯片型号,选择适合的芯片即可。

4. 选择IO的电平标准,高低电平的电压范围是不同的,这里选择默认的LVTTL

5. 是否创建MSS模块,MSS里有PLL和ARM M3 的使用,以后用到PLL和ARM内核时再添加,然后一直finish下去
到这里工程就创建完了,然后会在存储路径下生成一个和工程名称一样的文件夹。

支持HDL和原理图两种方式来执行

或者点击 File -> New -> HDL ,这两种方式都可以创建一个Verilog 设计文件,这里选择verilog文件

输入模块的名称: led_driver ,不用添加 v后缀名
led_driver.v:
module led_driver(
//input
input clk, //clk=2MHz
input rst_n, //0=reset
//output
output reg led
);
parameter T_500MS = 999999; //1M
reg [31:0] cnt;
always @ (posedge clk)
begin
if(!rst_n)
cnt <= 32'b0;
else if(cnt >= T_500MS)
cnt <= 32'b0;
else //cnt < T_500MS
cnt <= cnt + 32'b1;
end
always @ (posedge clk)
begin
if(!rst_n)
led <= 1'b1;
else if(cnt >= T_500MS)
led <= ~led;
end
endmodule
可以看到非常简单,定义一个计数器,然后系统时钟为2Mhz = 500ns, 500ms = 1M 个时钟周期

给创建的testbench文件 后缀加上_tb ,因为我们的板子外部晶振是2M,所以这里系统时钟周期为500ns,这个也可以在文件中更改

点击ok可以看到,Libero软件生成了一些基本的代码,包括端口定义等等,输入信号的初始化等等,我们只需要添加几行即可
`timescale 1ns/100ps
module led_driver_tb;
parameter SYSCLK_PERIOD = 500;// 2MHZ
reg SYSCLK;
reg NSYSRESET;
wire led; //add output reg
initial
begin
SYSCLK = 1'b0;
NSYSRESET = 1'b0;
end
initial
begin
#(SYSCLK_PERIOD * 10 )
NSYSRESET = 1'b0; //add system reset
#(SYSCLK_PERIOD * 100 )
NSYSRESET = 1'b1; //add system set
end
always @(SYSCLK) //generate system clock
#(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;
led_driver led_driver_0 (
// Inputs
.clk(SYSCLK),
.rst_n(NSYSRESET),
// Outputs
.led(led ) //add port
// Inouts
);
endmodule
仿真代码非常简单,输入信号初始化,NSYSRESET在10个时钟周期之后拉低,100个时钟周期之后拉高。
仿真代码语法检查无误之后,可以进行modelSim自动仿真,在安装Libero时,已经默认安装了ModelSim软件,直接双击simulate,这里要注意选择verify pre-synthesized design

这时候我们就可以看到仿真输出信号了

参考:
https://blog.csdn.net/whik1194/article/details/101714930