【FPGA-DSP】第六期:Black Box调用流程

news2024/11/25 2:47:49

目录

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)
begin
  if(!rst_n)//复位:初始化
  begin
    led <= 4'd0;
    timer_cnt <= 32'd0;
  end
  else if(timer_cnt >= 32'd49) //每过50个clk周期
  begin
    led <= led + 4'd1;  //每过50个时钟周期,LED灯依此亮灭(LED亮灭频率由timer_cnt决定)
    timer_cnt <= 32'd0;//计数器清零
  end
  else
  begin
    led <= led;
    timer_cnt <= timer_cnt + 32'd1;//计数过程
  end
end

endmodule

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,清零。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数值模型系列】CAMx编译运行中的几个小问题

最近在CAMx的编译运行工作中&#xff0c;遇到了几个小问题&#xff0c;在此记录一下。 问题1&#xff1a;CAMx2IOAPI编译报错 报错如下&#xff1a; CAMx2IOAPI依赖于IOAPI和NetCDF库&#xff0c;在Makefile文件中加以配置即可&#xff0c;但出现此错的原因其实是默认的Makef…

【大数据之Hadoop】十四、MapReduce之Combiner合并

Combiner是Mapper和Reducer之间的组件&#xff0c;其组件的父类是Reducer。 Combiner和Reducer的区别&#xff1a; Combiner是运行在每一个MapTask所在的节点&#xff0c;即对每一个MapTask的输出进行局部汇总&#xff0c;减少网络传输量。 Reducer则是接收全局是Mapper的输出…

涨点神器:Yolov5/Yolov7引入CVPR2023 InternImage:注入新机制,扩展DCNv3,助力涨点,COCO新纪录65.4mAP!

1.InternImage介绍 论文:https://arxiv.org/abs/2211.05778 代码:GitHub - OpenGVLab/InternImage: [CVPR 2023 Highlight] InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions 理论部分参考知乎:CVPR2023 Highlight | 书生模型霸…

GPT-4要革程序员的命?智能开发的理想与现实 | 爱分析调研

“生成式人工智能&#xff08;AIGC&#xff09;将在三年内终结编程。” ——Matt Welsh&#xff0c;前哈佛大学计算机科学教授、Google 工程主管 GPT-4 也许还不完美&#xff0c;但智能开发时代真的来了 美国时间3月14日&#xff0c;OpenAI 正式发布 GPT-4&#xff0c;在 Chat…

【Navidrome 开源音乐服务器】手把手教你打造属于自己的音乐播放器随时随地想听就听

目录 1. 前言 2. Navidrome网站搭建 2.1 Navidrome下载和安装 2.1.1 安装并添加ffmpeg 2.1.2下载并配置Navidrome 2.1.3 添加Navidrome到系统服务 2.2. Navidrome网页测试 3. 本地网页发布 3.1 cpolar的安装和注册 3.2 Cpolar云端设置 3.3 Cpolar本地设置 4. 公网访…

电商数仓—前言

项目流程图 1.数据仓库的概念 数据 业务数据 存储在mysql 处理事务过程中产生的数据例如&#xff1a;登录、下单、支付用户行为数据 日志文件&#xff08;以文件形式&#xff09; 用户与客户端产品交互过程中产生的数据通过埋点实现&#xff1a;代码埋点&#xff08;前端/后…

Unity集成GPT

GPT想必是最近互联网最火的话题了&#xff0c;作为一个Unity开发者&#xff0c;今天来介绍一下如何在Unity中使用GPT。 一、API 密钥 使用GPT的API首先要获得密钥&#xff0c;如下进入OpenAI官网(https://platform.openai.com/account/api-keys)–>选择自己的账号–>查…

Docker-Compose企业生产环境实战

1. Docker-Compose企业生产环境实战 Docker Compose 是 Docker 官方编排&#xff08;Orchestration&#xff09;项目之一&#xff0c;负责快速在集群中部署分布式应用。Compose 定位是“defining and running complex applications with Docker”&#xff0c;前身是 Fig&#…

手把手教你如何管理进程和计划任务管理

目录一、查看和控制进程1.1查看进程1.1.1 ps 命令— 查看静态的进程统计信息1.1.2ps -elf 命令— 查看静态的进程统计信息1.1.3grep过滤查询1.1.4top命令—动态查看进程信息1.1.5pgrep命令— 根据特定条件查询进程PID信息1.1.6pstree命令—查看进程树1.2控制进程1.2.1手动启动1…

单片机--第六章中断系统--例6-3学习

单片机--第六章中断系统--例6-3学习 同6-2图&#xff0c;要求&#xff1a;使用定时器T0中断实现流水灯操作&#xff0c;流水频率为每0.5s更替一次&#xff08;假设单片机外接11.0592MHZ的晶振&#xff09;。 这个代码实现的是流水灯的效果&#xff0c;即将多个 LED 灯依次点亮并…

.net6 Program.cs 文件解析

Program.cs 是整个Web应用程序的入口文件&#xff0c;.NET6 用了极简单的风格搞定了很多事情。 Program.cs中首先注意的是&#xff1a; 1.builder.Services.AddXXX是用来添加服务的&#xff0c;builder是WebApplicationBuilder对象&#xff1b; 2.builder.Services.Configure&…

【C++】判断语句中对变量的合理定义

先总结一下这篇博客的核心&#xff1a; C中&#xff0c;不允许重复定义同一个变量&#xff0c;否则保留的初次定义的值&#xff08;虽然编译能通过&#xff09;涉及到判断的多分支时&#xff0c;应在进判断分支之前定义好变量&#xff0c;如果在分支中分别定义会出现编译错误&…

基于HashData的湖仓一体解决方案的探索与实践

2023年4月7日&#xff0c;由中国DBA联盟&#xff08;ACDU&#xff09;和墨天轮社区联合主办的第十二届『数据技术嘉年华』(DTC 2023) 在北京新云南皇冠假日酒店盛大开启。HashData资深解决方案架构师李俊在4月8号专题会场6-“融合应用&#xff1a;湖仓技术创新”上发表了《基于…

从零开始学JAVA(05):面向对象编程--04

一、StringBuilder StringBuilder是一个非常方便的用来处理和拼接字符串的类&#xff0c;它和string不同的是&#xff0c;它是可变的 package com.lcy.learn;public class LearnStringBuilder {public static void main(String[] args) {// StringBuilder首先是可变的// 而且对…

牛客网算法八股刷题系列(九)训练过程损失函数不下降问题

牛客网算法八股刷题系列——训练过程损失函数不下降问题题目描述正确答案&#xff1a;D\mathcal DD题目解析延伸&#xff1a;训练过程损失函数不下降的其他情况题目描述 在训练神经网络时&#xff0c;损失函数(Loss)(\text{Loss})(Loss)在最初的几个Epoch\text{Epoch}Epoch时没…

delphi 实现Ribbon风格的窗体

随着office2007的兴起&#xff0c;微软让我们看到了Ribbon风格的窗体&#xff0c;现在很多软件也都开始使用Ribbon风格。 那么我们如果要自己开发&#xff0c;应当怎么做呢&#xff1f;本文就是为大家解开这个疑团的。 首先&#xff0c;Delphi本身并没有Ribbon风格的窗口可以直…

epoll为什么用红黑树?

网络编程的时候有没有碰到过 Socket 对象&#xff1f;或者在配置代理的时候&#xff0c;有没有碰到配置 Socket 地址&#xff1f;当你看到服务端 Socket、客户端 Socket 等名词时&#xff0c;是否可以明确理解这些概念&#xff1f; 学习好这些知识有一条主线&#xff0c;就是抓…

Dockerfile构建镜像缓慢解决方案总结

分几种不同的情况&#xff0c;不断更新中 1、Dockerfile apk add 下载更新软件时&#xff0c;比较慢&#xff0c;如何解决 例子如下&#xff1a; 更好一下仓库源 RUN sed -i s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g /etc/apk/repositories或者改成科大的镜像 RUN…

android核心架构Framework组件介绍

作为一个android开发者&#xff0c;核心架构是必须要了解的。只有了解每个核心层的作用&#xff0c;才能更深入的理解和学习。本篇主要讲解Java Framework层核心代码流程。 文章目录一&#xff0c;Android系统架构1.System Apps2.Java Framework3.系统运行库层4.硬件抽象层&…

Matplotlib库的简单用法

Matplotlib库的简单用法 Matplotlib是python科学计算中最基础、最重要的绘图库&#xff0c;是Python中最流行的数据可视化库之一&#xff0c;它提供了大量的绘图函数和工具&#xff0c;可以让用户创建各种类型的图表和图形&#xff0c;一般使用matpltlib完全可以满足我们绘图需…