FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(四)

news2024/12/31 6:50:34

        接着同样地我们也需要完成对千兆网口ETH模块和USB2.0模块的编写,实际上和UART串口模块的设计思想大同小异,也同样地需要完成两项关键功能即识别并解析报文、接收并发送数据,千兆网口ETH和USB2.0的底层驱动在前面的例程中也详细说明了,所以在这里笔者不想再重复赘述,当然相比之前千兆网口实现ARP、ICMP协议和UDP报文的自发自收、USB2.0接收并回复CRC16校验等例程,显然要对之前的代码进行一些修改,使其满足整个项目的实际需求。

       典型地在eth_control_top顶层模块中需要把UDP协议收到的数据、在usb_control_top顶层模块中需要把USB2.0中收到的数据,通过信号udp_dout和udp_dout_vld、信号rxd_data和rxd_data_vld分别例化出来,再在顶层模块中完成报文解析,有效提取出1字节的指令码和4字节的数据码送到下游指令解析模块中进行解析,指令解析模块把相应的参数通过FIFO写入任意波和正弦波模块中即可实现上位机程控开发板输出不同波形的效果。

       在这里笔者就只简单说明下ETH顶层模块和USB2.0顶层模块的代码设计,如图1和2所示是两个顶层模块的代码设计供大家参考,其余底层模块的修改细节可直接查看源工程代码即可。

图1 千兆网口顶层模块的代码设计

图2 USB2.0接口顶层模块的代码设计

       在介绍完RS232串口、ETH千兆网口、USB2.0接口顶层模块的代码设计后,下面就去着重说明指令解析模块的代码设计,如表1所示是command_detect模块信号列表,如图3所示是指令解析模块的代码设计。

       在这个模块中我们需要去实现下面几个重要的能:1. 解析上游模块三种接口中传来的指令码和数据码;2. 如果指令码是0x00即检测当前链路连接是否正常则回复“+RIGHT”或“-ERROR”;3. 使用FIFO解决跨时钟域的数据传输问题,但对于指令码0x01到0x07这7条设置指令全都用FIFO缓存数据码,则要用21个异步FIFO将会导致设计非常繁琐,这里每种接口用2个异步FIFO缓存数据码、1个异步FIFO缓存“+RIGHT”或“-ERROR”回复报文,所以把指令码0x02、0x05、0x06、0x07即设置波形种类、上升时间、下降时间、保持时间都存储到一个104位宽的FIFO中,而把指令码0x01、0x03、0x04即设置DAC输出开关、正弦波频率、相位控制字存到一个65位宽的FIFO中;4. 当然如果FIFO接到数据码就立刻发送到下游任意波模块和正弦波模块显然会出现问题,典型地如任意波模块状态机跑飞,正弦波相位控制字偏移不对等,所以需要下游模块传来wave_rdy和ddsip_rdy后才把FIFO中的数据写入;5. 在前面Modelsim的仿真中也注意到正弦波的相位控制字需要复位DDS IP核后才方便观察起始相位,所以在这个模块里设计选取开关机的上升沿作为DDS IP核的复位标志,即检测到DAC输出开启后输出4个时钟周期的DDS IP核复位低电平,再向正弦波模块中输出dds_dout_freq和dds_dout_freq_vld信号。

信号列表

信号名

I/O

位宽

clk

I

1

clk_120m

I

1

usb_clkout

I

1

gmii_rx_clk

I

1

gmii_tx_clk

I

1

dac_clk

I

1

rst_n

I

1

wave_rdy

I

1

ddsip_rdy

I

1

uart_txd_rdy

I

1

uart_din_cmd

I

8

uart_din_data

I

32

uart_din_vld

I

1

uart_dout

O

8

uart_dout_vld

O

1

usb_txd_rdy

I

1

usb_din_cmd

I

8

usb_din_data

I

32

usb_din_vld

I

1

usb_rdfifo_empty

O

1

usb_dout

O

8

usb_dout_vld

O

1

eth_txd_rdy

I

1

eth_din_cmd

I

8

eth_din_data

I

32

eth_din_vld

I

1

udp_tx_en

O

1

eth_dout

O

8

eth_dout_vld

O

1

power_onoff

O

1

sinel_waveh_mode

O

1

wave_dout

O

104

wave_dout_vld

O

1

ddsip_sclr

O

1

dds_dout_freq

O

32

dds_dout_freq_vld

O

1

dds_dout_phase

O

32

dds_dout_phase_vld

O

1

表1 command_detect模块信号列表

图3 指令解析模块的代码设计

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

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

相关文章

常用的设计模式(单例模式、工厂模式等)

1.单例模式 概述: 在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式. 例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造…

Centos切换jdk版本

先安装了jdk1.8的版本,需要使用jdk17的版本 1.先安装jdk17,再配置环境变量: vim ~/.bashrc 2.在最后一行添加 ##这个添加的就是路径,一定要和自己jdk安装的路径是一致的 export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 3.然…

Mybatis框架超详解及运用总结

Mybatis 一、什么是Mybatils?二、第一个Mybatils程序2.1、创建springboot工程2.2、准备数据2.3、配置MyBatis2.4、编写SQL语句2.5、单元测试 三、JDBC四、数据库连接池五、lombok六、Mybatis基础操作6.1、删除6.2、新增6.2.1、主键返回 6.3、修改6.4、查询6.4.1、数…

【AI绘画】AI绘画的创意应用

目录 1.引言2.将AI生成的图像转化为数字艺术品2.1AI生成的画作拍卖2.2将AI生成的图像转化为雕塑 3.将AI生成的图像用于虚拟场景的创建3.1使用GAN生成虚拟人物3.2在虚拟场景中使用AI生成的图像 1.引言 当今的AI绘画技术已经发展到了让人惊艳的程度,不仅可以生成高质量…

【每日一题Day183】LC1187使数组严格递增 | dp

使数组严格递增【LC1187】 给你两个整数数组 arr1 和 arr2&#xff0c;返回使 arr1 严格递增所需要的最小「操作」数&#xff08;可能为 0&#xff09;。 每一步「操作」中&#xff0c;你可以分别从 arr1 和 arr2 中各选出一个索引&#xff0c;分别为 i 和 j&#xff0c;0 <…

缓存优化----SpringCache

spring cache spring Cache介绍 spring cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring cache提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不…

springboot JWT 搭建授权服务器

目录 0 基本介绍 0.1 课程视频 0.2 架构逻辑图 0.2.1 登录JWT与授权服务器交互 0.2.2 登录成功后JWT与gateway-server交互 路由限制 1 JWT私钥公钥 1.1 安装git ->win系统右键 -> git bash here 1.2 生成私钥jks文件 1.3 用私钥jks文件解析出公钥 1.4 保存 BEGI…

造型简约的机箱,安装简单兼容性好,安钛克P20C体验

我们准备组装一台新主机的时候&#xff0c;机箱确实很重要&#xff0c;它决定了主机的整体风格和兼容性。我比较喜欢用中塔机箱&#xff0c;像是上个月我新装的主机&#xff0c;用的就是安钛克P20C&#xff0c;这款机箱的设计很简约&#xff0c;而且还有多种版本可选&#xff0…

C++——模板进阶

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;类型模板参数&#x1f337;非类型模板参数&#x1f337;模板的特化&#x1f338;引例&#x1f338;函数模板的特化&#x1f338;类模板特化&#x1f33c;全特化 &#x1f338;偏特化&#x1f33c;部分特化&am…

【下载器篇】IDM下载器个性化设置

【下载器篇】IDM下载器个性化设置 IDM个性化设置—【蘇小沐】 文章目录 【下载器篇】IDM下载器个性化设置1.实验环境 &#xff08;一&#xff09;下载类型扩展UA默认值 &#xff08;二&#xff09;工具栏样式&#xff08;改风格&#xff09;3D Style样式 &#xff08;三&#…

2023.4.23 自注意力机制

一般都是单向量输入&#xff0c;但是如果多向量输入应该如何处理呢&#xff1f;引出自注意力机制 多向量输入可能会有多种输出&#xff0c;如果输入n个向量&#xff0c;输出n个向量表明这是sequence labeling&#xff0c;比如对于一个英文句子&#xff0c;每一个单词都判断是什…

c++11 标准模板(STL)(std::priority_queue)(二)

适配一个容器以提供优先级队列 std::priority_queue 定义于头文件 <queue> template< class T, class Container std::vector<T>, class Compare std::less<typename Container::value_type> > class priority_queue; priority_queu…

Windows下编译UHD

1.安装Visual Studio 2019,下载地址https://download.csdn.net/download/qq_36314864/87719209 2.安装cmake,下载地址https://download.csdn.net/download/qq_36314864/87719747 安装完成后记得C:\Program Files\cmake-3.22.1-windows-x86_64\bin添加到环境变量里面,或者安…

数据结构修炼:链表习题讲解!!!

题一&#xff1a;移除链表元素 我们可以看出这道题是让我们删除特定数据&#xff0c;我们可以用双指针来解这道题&#xff1a; 如果首元素为val&#xff0c;那么cur和head一起后移&#xff1a; 如果没有碰到val&#xff0c;那么就会cur后移&#xff0c;并且提前将cur传给perv&a…

如何避免美国ASP主机服务器崩溃和故障?

在当今数字化时代&#xff0c;网站是一个公司展示其业务的主要方式之一。因此&#xff0c;公司的在线业务应该始终保持高可用性和可靠性。ASP主机服务器是一种用于托管网站的服务器&#xff0c;其特点是可靠性高。但是&#xff0c;即使是最可靠的服务器也会遭受故障或崩溃。在本…

漏刻有时数据可视化大屏引导页设计(php原生开发、主背景图片更换、标题设置)

文章目录 1.引入外部js库2.HTML排版3.项目配置文件4.菜单图标自动匹配5.php与html混排6.CSS样式表7.添加/编辑信息8.生成配置文件 在制作数据可视化大屏时&#xff0c;尤其是在触摸屏演示时&#xff0c;需要开发和设计对应的数据大屏引导页。基于常见场景&#xff0c;单独开发数…

Unity API详解——Object类

Object类是Unity中所有对象的基类&#xff0c;例如GameObject、Component、Material、Shader、Texture、Mesh、Font等都是Object的子类。本博客介绍Object类的一些实例方法和静态方法。 一、Object类实例方法 在Object类中&#xff0c;涉及的实例方法主要有GetInstanceID方法…

Java基础学习(10)

Java基础学习 一、JDK8时间类1.1 Zoneld时区1.2 Instant时间戳1.3 ZonedDateTime1.4 DateTimeFormatter1.5 日历类时间表示1.6 工具类1.7 包装类JDK5提出的新特性Integer成员方法 二、集合进阶2.1 集合的体系结构2.1.1 Collection 2.2collection的遍历方式2.2.1 迭代器遍历2.2.…

RecycleView与TabLayout联动展示更多功能列表页面的实现

一.前言 对于更多功能页面&#xff0c;使用RecycleView与TabLayout联动方式实现是比较常见的&#xff0c;先上效果图&#xff08;请大佬们忽略gif的水印&#xff09; 单独使用TabLayout和RecycleView都是比较容易的&#xff0c;这里就不做举例了&#xff1b;gif中的列表实际上…

权限控制导入到项目中

在项目中应用 进行认证和授权需要前面课程中提到的权限模型涉及的7张表支撑&#xff0c;因为用户信息、权限信息、菜单信息、角色信息、关联信息等都保存在这7张表中&#xff0c;也就是这些表中的数据是进行认证和授权的依据。所以在真正进行认证和授权之前需要对这些数据进行…