Zynq开发实践(FPGA之输入、输出整合)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        fpga开发的时候习惯上先把功能拆分成若干个模块。针对这些模块,一个一、个实现好之后,再用wire连接即可。这一点有点像软件编程的function。如果是规模不大的c项目,例如嵌入式mcu项目。我们也是先把项目拆分成若干个function,一个一个实现好function后,再用全局变量或者临时变量把这些function联系在一起,这样项目就可以拼起来了。fpga也是一样的。

1、自顶向下开发

        自顶向下开发,主要是面向客户开发。首先确认开户需要什么功能,然后把这些功能切分成一个一个业务。业务部分分好后,就会进一步切分成不同的状态机和外设。外设部分又会涉及到一些总线、接口和协议。总之,一个fpga产品根据规模大小,需要至上而下一步一步拆分和开发。一方面这样可以降低风险,另外一方面时间和质量可控,也有利于降低风险。

2、修改led.v程序

        之前我们写过led.v,当时led闪烁的实现是通过计数器来进行的。因此既然上一次我们实现了按键功能,那么就可以通过按键实现led.v功能了。即,按一下,led取反一次。这样,就会形成按键和led的交互功能。


module led(input clk,input rst,input ce,output led);reg led_o;always@(posedge clk or negedge rst)if(!rst)led_o <= 1'b0;else if(ce)led_o <= ~led_o;assign led = led_o;endmodule

        代码部分不难,就是这里出现了一个ce,而这个ce正是按键提供的。

3、led.v和key.v连接信号

        事实上,把所有的verilog文件整合成一个.v也是可以的。只不过这样的.v结构过于庞大,很容易出错,所以一般就拆分成若干个模块。彼此之间用wire联系。这里的key.v和led.v就是用一个out信号连接。

key key(.rst(rst),.clk(clk),.in(in),.out(out));led led(.rst(rst),.clk(clk),.ce(out),.led(led_out));

        注意,这里的rst和clk都是共享的,也就是说每一个clock的边沿触发,两个模块都是同时工作的。但是led的工作依赖于key的输出,也就是说如果out没有输出,那么led虽然也工作,但是没有状态的改变。只有等到out输出为1的时候,才会发生led的翻转。

4、测试和验证

        这里没有把led和key做一个整合,只是在tb.v做了连接。本质上其实是一样的,有需要的同学可以重新写一个verilog,里面调用led.v和key.v,类似于这样,

module key_led_top(input clk,input rst,input in,output led_out);wire out;key key(.rst(rst),.clk(clk),.in(in),.out(out));led led(.rst(rst),.clk(clk),.ce(out),.led(led_out));endmodule

        在此基础上修改一下命令行,

C:\iverilog\bin\iverilog.exe -o tb tb.v key_led_top.v key.v led.v && C:\iverilog\bin\vvp.exe -n tb -lxt2 &&C:\iverilog\gtkwave\bin\gtkwave.exe hello.vcd

        这昂就可以生成我们需要的波形文件。首先确认下整体功能对不对。如果不对,就继续看下子模块的信号,这就是一般的仿真测试步骤。通过图形可以明显看到,只有in输入达到一定时间的时候,才会发生led信号翻转。

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

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

相关文章

【Linux基础】深入理解计算机启动原理:MBR主引导记录详解

目录 引言 1 硬盘分区初始化概述 1.1 为什么需要硬盘分区 1.2 硬盘分区格式的发展 1.3 分区初始化的基本流程 2 MBR详解 2.1 MBR的定义与位置 2.2 MBR的结构详解 2.3 分区表结构详解 2.4 MBR的工作原理 2.5 MBR的引导程序 3 MBR的局限性 3.1 硬盘容量限制 3.2 分…

Linux 线程同步

线程同步 由于线程共享内存&#xff0c;访问共享数据&#xff08;全局变量、堆内存&#xff09;必须进行同步&#xff0c;以防止竞态条件&#xff08;Race Conditions&#xff09;导致数据不一致或程序崩溃。 子线程没有独立的地址空间&#xff0c;数据通常是共享的&#xff1b…

世界模型的典型框架与分类

1.概述 人类和动物智能的一个重要方面是我们对世界的内部模型。我们使用这个模型来预测我们的行为将如何影响我们的环境&#xff0c;预测未来的事件&#xff0c;并计划复杂的行动序列以实现目标。当前大多数机器学习研究都集中在被动理解数据的模型上&#xff0c;例如图像分类…

【Day 35】Linux-Mysql错误总结

&#xff08;一&#xff09;MySQL 基础操作与服务故障类 连接层错误&#xff08;客户端与服务器的连接建立失败&#xff09; 解决 socket 路径、文件存在性及服务可用性问题。 1、MySQL 客户端连接失败&#xff08;报错 “Cant connect to local MySQL server throgh socket…

MYSQL速通(2/5)

六、多表查询1、多表关系①、一对多&#xff08;多对一&#xff09;举例&#xff1a;一个部门对多个员工实现&#xff1a;多的那边建立外键&#xff0c;指向一的那边的主键②、多对多举例&#xff1a;一个学生可选多门课&#xff0c;一门课可被多个学生选实现&#xff1a;建立中…

CRM、ERP、HRP系统有啥区别?

要理解CRM、ERP、HRP系统&#xff0c;需先明确三者的核心定位&#xff08;聚焦客户、企业全资源、特定领域资源&#xff09;&#xff0c;再从管理范围、目标、用户等维度区分。以下是详细解析&#xff1a; 一、各系统核心定义与核心模块 1. CRM系统&#xff1a;客户关系管理系统…

【系统分析师】高分论文:论系统测试技术及应用

【摘要】 2022 年 7月&#xff0c;我作为项目负贵人&#xff0c;参加了某银行的统计数据发布系统建设项目。该项目合同金额230 万元&#xff0c;合同工期为半年。统计数据发布系统的主要目标是为该行建设一个企业级的数据统计、分析、发布平台&#xff0c;实现定制化的数据应用…

第5篇 c++ 函数的多返回值实现-返回多个值

c 函数的多返回值实现std::tuple<Mat, int, double, std::string> AuatoPafackSydstem::GetMatchingValue(Mat mat_img, std::string img_template_path) {Mat a;return {a,1,0.001,""}; }std::tuple<Mat, int, double, std::string> GetMatchingValue(M…

C++基础(⑤删除链表中的重复节点(链表 + 遍历))

题目描述 给定一个排序好的链表&#xff08;升序&#xff09;&#xff0c;删除所有重复的元素&#xff0c;使每个元素只出现一次。 示例&#xff1a; 输入&#xff1a;1 → 1 → 2 → 3 → 3 输出&#xff1a;1 → 2 → 3 解题思路 核心观察&#xff1a;链表已排序&#xff0c;…

摩搭api 实现

AI图片生成器前端实现详解本文详细解析一个功能完整的AI图片生成器前端实现&#xff0c;包含主题切换、参数配置、图片生成与预览等核心功能。项目概述 这是一个基于ModelScope平台的AI图片生成器前端实现&#xff0c;用户可以通过输入提示词、选择模型和调整参数来生成高质量图…

c++--线程休眠/sleep

线程休眠<unistd.h>--sleep()<thread>--std::this_thread::sleep_for()ros--rclcpp::sleep_for()以上的三个sleep也就是休眠会占用CPU吗简单直接的回答是&#xff1a;不会。一个正确使用、正在休眠的线程不会占用CPU资源。核心原理当你调用像 std::this_thread::sl…

人工智能基础概念

The brain happens to be a meat machine. —— Marvin Lee Minsky 目录 人类智能 人工智能 三个阶段 三大学派 四个要素 关系辨析 维度分类 发展简史 技术方向 应用领域 产业图谱 发展趋势 人类智能 人工智能的目的是通过探索智慧的实质&#xff0c;扩展人类智能…

企业数字资产管理怎么转型更高效?一文打通策略与实践

核心要点 问题&#xff1a; 传统的内容管理方式效率低、协作难、版本混乱&#xff0c;企业转型 DAM 系统面临选型难和落地难两大挑战。 答案&#xff1a; 采用阶段性转型策略&#xff0c;结合智能化工具和标准化流程&#xff0c;能帮助企业构建可扩展、易协作、强治理的内容资…

python pyqt5开发DoIP上位机【源码】

目录 文章合集 文章合集 python pyqt5开发DoIP上位机【介绍】 python pyqt5开发DoIP上位机【代码里发送常用uds命令是怎么实现的?】 python pyqt5开发DoIP上位机【代码里是怎么获取诊断回复的?】 python pyqt5开发DoIP上位机【诊断回复的函数都是怎么调用的?】 python …

IIC (I2C)通信

一、IIC的特点I2C&#xff08;Inter IC Bus&#xff09;又成为&#xff08;爱方C I2C&#xff09;是由Philips公司开发的一种通用数据总线两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09;同步&#xff0c;半双工带数据…

【图像处理 - 基础知识】ISP(Image Signal Processor)处理

文章目录1. 图像传感背景2. 图像数据格式2.1. 【RAW】Bayer滤色阵列&#xff08;Bayer Filter Array&#xff09;2.2. 【RGB】2.3. 【YUV】3. ISP&#xff08;Image Signal Processor&#xff09;3.1. ISP定义3.2. 分类概括1 RAW 域&#xff08;Raw Domain&#xff09;2 RGB 域…

PostgreSQL 数据库灾备要点与举例说明**

PostgreSQL 数据库灾备要点与举例说明 数据库灾备(Disaster Recovery, DR)是确保业务连续性的核心环节,其目标是在主生产环境遭遇计划外中断(如硬件故障、自然灾害、人为错误、数据损坏)时,能快速恢复数据和服务。PostgreSQL 因其强大和开源特性,提供了多种高效的灾备方…

【GaussDB】在逻辑复制中剔除指定用户的事务

【GaussDB】在逻辑复制中剔除指定用户的事务 1. 需求背景 在逻辑复制中&#xff0c;期望对源端指定用户的所有操作不复制到目标端。然而WAL日志中没有用户信息可用于过滤&#xff0c;因此考虑结合审计日志来实现这一需求。 2. 解决方案 2.1 配置审计日志 首先需要开启事务…

C/C++---预定义常量

在C/C开发中&#xff0c;预定义常量是编译器与标准库提供的“隐形工具集”&#xff0c;无需开发者显式定义&#xff0c;却在跨平台兼容、调试定位、数值计算安全等场景中发挥核心作用。这些常量涵盖编译环境标识、语言标准判断、代码定位信息、数值边界限制等多个维度&#xff…

嵌入式学习笔记--LINUX系统编程--DAY03进程控制

1.进程概述进程和程序的区别程序&#xff1a;程序是存储在存储介质上的一个可执行文件---静态的进程&#xff1a;进程是程序的执行实例。可以说进程就是正在执行的程序。程序是一些指令的集合&#xff0c;而进程是程序的执行过程&#xff0c;这个过程的状态是变化的&#xff0c…