admin 管理员组

文章数量: 887021

【FPGA

目录

1. 实际操作流程

1.1 Verilog 代码编写

1.2 system generator操作

1.2.1 Black box模块

1.2.2 Simulink 搭建

2. Simulink模型优化 


System Generator是一个Xilinx公司的工具,用于设计数字信号处理系统。Black Box是System Generator中的一个block,可以将其他HDL文件以黑盒的形式封装到System Generator设计中,在仿真时使用Simulink+Vivado Simulator(或ModelSim)协同仿真的方法,在Simulink环境中完成设计的仿真测试,即使用verilog代码进行编写,并在system generator中完成调用。参考:[R1],[R2]

下面开始实际操作演示~

1. 实际操作流程

1.1 Verilog 代码编写

简单编写一个通过计数器timer_cnt来控制4个LED灯的亮灭

module led(input           clk         ,input           rst_n       ,input           ce          ,//使用Block box时,时钟clk和时钟使能ce是必须要包含的,同时命名要满足规范output reg[3:0] led         //四个LED灯
);reg[31:0] timer_cnt;always@ (posedge clk or negedge rst_n)
beginif(!rst_n)//复位:初始化beginled <= 4'd0;timer_cnt <= 32'd0;endelse if(timer_cnt >= 32'd49) //每过50个clk周期beginled <= led + 4'd1;  //每过50个时钟周期,LED灯依此亮灭(LED亮灭频率由timer_cnt决定)timer_cnt <= 32'd0;//计数器清零endelsebeginled <= led;timer_cnt <= timer_cnt + 32'd1;//计数过程end
endendmodule

1.2 system generator操作

1.2.1 Black box模块

通过system generator打开matlab,并打开simulink界面,首先将空白模型保存,我的保存路径为:

E:\FPGA\FPGA_DSP\Black_box\simulink\blackbox_demo.slx

然后在空白模型中调用black box模块

并在该模块中添加我们的led.v代码,如下图所示,输入仅为rst_n和led引脚,clk和ce引脚没有显示

当我们添加好代码之后,可以看到在matlab中会自动生成对应的config配置文件

在该配置文件中,clk和ce被特别声明,引脚被隐藏,在内部已经被链接,这就是为什么在simulink的black box模块中没有显示的原因

接下来开始我们的simulink模块搭建

1.2.2 Simulink 搭建

  • rst_n输入

由于rst_n输出只有0、1两种(真假),因此用布尔型表示

  • led输出 

注意:我们基于上图直接运行的话,示波器是没有任何显示的。原因是因为在开始运行的时候并未进行初始化,没有初始化寄存器,即没有进行复位操作,led寄存器就会没有输出 

  • 复位信号设置

通过将计数器,比较器,常数模块相结合来构造复位信号

计数器常数模块

模型构建分析:计数器从0~1023,一共1024个时钟周期归零一次,常数模块恒定为0,通过比较器将二者相比较,当计数器与常数模块相等(Counter=Constant=0)时,比较器模块输出为1(真),然而计数器每过1024个时钟周期归0一次,因此每隔1024个时钟周期比较器输出1,其余均输出0,然而blackbox模块为低电平复位,因此我们将比较器的输出取反,即可实现每隔1024个时钟周期复位一次。 

结果如下图所示:

从上图可以看出示波器现实的led输出结果并不是我们期望的看到的结果,虽然上图现实的结果是正确的,但是不能与实际led的亮灭相对应,因此下面将使用一个额外模块来将输出结果与我们的led实际状态相对应

2. Simulink模型优化 

我们知道上述的4位led输出可以表示0~15共16个不同值,如上图结果所示,但是这样不能直观地与led的亮灭相结合,因此我们需要将led的四bit按位输出,每一位就可以表示不同led灯的状态。

模块所在位置模块配置

由于我们要依此取出4bit,因此offset of top bit选项需要从0一次填写到-3,其中0代表MSB,-3代表LSB

注意:FPGA模块最好不要与simulink中的模块(Scope)直连,需要经过input/output getway将FPGA的数据格式转化为matlab所需格式,从图中可以看出,我们的black box模块输出到matlab的scope时就没有经过output getway因此该模块上面会显示感叹号,Simulink报错如下 

意思是:外部连接块定义为不经过网关直接驱动Simulink/非sysgen块的块。例如,SysGen块的输出端口连接到Simulink Scope的输入端口。这个特性将在SysGen的未来版本中被移除。下表列出了具有这种连接的块。修改设计,插入网关,并关闭“转换成输出端口”。同时,带有打开信号记录的端口的Sysgen块被归类为外部连接块。有关更多详细信息,请参阅sysgenfeatuereport .htm。
禁用此模型的特性警告。 所以我们需要添加一个output getway即可

添加好之后可以发现再也没有报错了,完美~  

示波器输出结果如下所示:

 结果正确! 在1024个采样点处rst_n = 0,清零。

本文标签: FPGA