PCI9054入门1:硬件引脚定义、时序、FPGA端驱动源码

文章目录

  • 1:PCI9054的FPGA侧(local侧引脚定义)
  • 2:PCI9054的C模式下的读写时序
  • 3:FPGA代码部分
    • 具体代码:

1:PCI9054的FPGA侧(local侧引脚定义)

而PCI9054的本地总线端的主要管脚信号定义如下表所示。这些管脚是连接到本地逻辑控制电路部分的,并由本地逻辑控制电路部分实现接口时序控制。

本组信号引脚主要用于PCI9054与Local端的连接,主要信号包括LA[31:2]、LD[3 1:0]、LHOLD、LHOLDA、ADS#、LCLK、LBE[3:0]#、LW/R#、READY#、WAIT#、BLAST#等。

CCS#:配置寄存器片选。低电平有效时,选中的是PCI9054的内部寄存器,Local端可以通过此方法配置寄存器。

LCLK: Local端的时钟输入,是Local端处理器与PCI9054之间的同步信号,如果没有此信号,PCI插卡将不能启动。

LINT#:本地中断信号。作为输入时可以引起PCI 中断,作为输出时,可以通过改写中断寄存器INTCSR的内容来改变中断状态。

LRESETo#: Local端复位信号。当PC19054复位(RST#有效)时此信号有效,可以用来复位本地处理器。

LA[31:2]:本地地址信号。代表物理地址的高30Bit,突发传输时可以自动增加表明一个连续的数据周期。

LW/R#:Local端的读写复用信号,低电平为读,高电平为写。

READY#:输入/输出准备好信号,表示总线上数据有效或写数据完成,用以连接PCI9054等待状态产生器。

ADS#:地址有效信号。表明LA[31:2]上的地址有效以及一个新的总线交易的开始,在第一个时钟周期内有效。

BLAST#:突发结束。表明总线访问的最后一次传送,由本地总线主设备驱动。

BTERM#:突发中止。用于中止一个突发传输并启动一个新的总线交易。

MODE[1:0]:总线工作模式选择。

<

2:PCI9054的C模式下的读写时序

MODE[1:0]都接地为0,设为C模式。

C模式是一种类似于单片机的工作方式。在这种模式下,PCI9054通过片内逻辑控制,将PCI的地址线和数据线分开,很方便的为本地工作时序提供各种工作方式,设计者只要严格控制Local端和PCI端的各种时序控制线,就可以很好的应用PCI9054芯片。C模式下可以进行配置寄存器、主模式、从模式及 DMA模式等操作。

<
PCI 写发起时序
<
PCI 读发起时序

3:FPGA代码部分

通过parameter来定义各个不同状态的参数。每一个状态的位宽为7位,接下来还需要定义两个7位的寄存器,一个用来表示当前状态,另一个用来表示下一个状态,如下所示:

这段Verilog代码是一个PCI Local Bus接口的模块定义。该模块用于连接PCI 9054芯片与其他组件之间的通信,通过一系列输入和输出信号来实现数据的读写和控制。以下是该代码的一些重要部分解释:

参数部分

序号代号含义
1parameter integer REG_ADDR_WIDTH = 8:定义了寄存器地址的位宽,默认为8位
2parameter integer REG_DATA_WIDTH = 32:定义了寄存器数据的位宽,默认为32位

信号部分

序号代号含义
1输入信号 clk全局系统时钟
2输入信号 areset_n来自PCI 9054的全局复位信号,低电平有效
3输入信号 i_hold本地总线接口的保持信号
4输出信号 o_holda经过逻辑处理后的保持信号
5输入信号 ads_nPCI总线地址有效信号,低电平有效
6输入信号 blast_nPCI总线传输结束信号,低电平有效
7输出信号 o_ready_n: 就绪信号在特定状态下为低电平,表示数据传输准备就绪
8输入信号 lw_rn读写控制信号,高电平表示写操作,低电平表示读操作。
9输入信号 la地址信号
10输入信号 i_ld输入的数据
11输出信号 ld_oen数据输出使能信号
12输出信号 o_ld输出的数据

接下来的代码部分描述了一个状态机,用于管理数据传输过程。不同的状态表示不同的传输阶段,如IDLE、TRANSFER、SINGLE_WAIT和SINGLE_END。

代码中使用的触发器和逻辑门用于控制状态转移和输出信号的生成,以实现稳定的数据传输和寄存器读写操作。

这段代码实现了一个复杂的功能模块,将PCI总线和本地总线之间的数据传输和控制进行了逻辑化和管理,从而实现了稳定的数据交换。

具体代码:

module pci_local_bus #(parameter integer REG_ADDR_WIDTH = 8,parameter integer REG_DATA_WIDTH = 32
)(// global system clock, fixed single-ended 40MHzinput wire                          clk         ,// Global Reset from PCI 9054input wire                          areset_n    ,// Local Bus Interfaceinput wire                          i_hold      ,output reg                          o_holda     ,input wire                          ads_n       ,input wire                          blast_n     ,output wire                         o_ready_n	,input wire                          lw_rn       ,input wire [18:2]                   la          ,input wire [REG_DATA_WIDTH-1:0]     i_ld        ,output wire                         ld_oen      ,output wire [REG_DATA_WIDTH-1:0]    o_ld        ,// Register R/W interfaceoutput wire                         wen         ,output wire [REG_ADDR_WIDTH-1:0]    waddr       ,output wire [REG_DATA_WIDTH-1:0]    wdata       ,output wire                         ren         ,output wire [REG_ADDR_WIDTH-1:0]    raddr       ,input wire [REG_DATA_WIDTH-1:0]     rdata
);
/*---------------------------------------------------------------------------------------*/
// generate ready state-machine
reg[3:0] current_state, next_state;	parameter [3:0] SM_IDLE			    = 4'b0001;
parameter [3:0] SM_TRANSFER		    = 4'b0010;
parameter [3:0] SM_SINGLE_WAIT	    = 4'b0100;
parameter [3:0] SM_SINGLE_END		= 4'b1000;// synchronous logic
always@(posedge clk or negedge areset_n)
beginif(~areset_n)current_state <= SM_IDLE;elsecurrent_state <= next_state;
end// combinational logic
always@(*)
case(current_state)SM_IDLE:if(~ads_n)next_state = SM_TRANSFER;elsenext_state = SM_IDLE;SM_TRANSFER:if(~blast_n)next_state = SM_SINGLE_WAIT;elsenext_state = SM_TRANSFER;SM_SINGLE_WAIT:next_state = SM_SINGLE_END;SM_SINGLE_END:if(ads_n && blast_n)next_state = SM_IDLE;else if(~ads_n)next_state = SM_TRANSFER;elsenext_state = SM_SINGLE_END;default:next_state = SM_IDLE;
endcase// output logic
assign o_ready_n = (current_state == SM_SINGLE_WAIT)?1'b0 : 1'b1;/*---------------------------------------------------------------------------------------*/
// asserts acknowledge reponsing to HOLD
always@(posedge clk or negedge areset_n)
if(~areset_n)   o_holda  <= 0;
else            o_holda  <= i_hold;
/*---------------------------------------------------------------------------------------*/
// internal register write/read logicassign wen      = (~o_ready_n & lw_rn)?1'b1 : 1'b0;
assign waddr	= (~o_ready_n & lw_rn)?la[2+REG_ADDR_WIDTH-1:2] : {REG_ADDR_WIDTH{1'b0}};
assign wdata	= (~o_ready_n & lw_rn)?i_ld : {REG_DATA_WIDTH{1'b0}};assign ren      = (~o_ready_n & ~lw_rn)?1'b1 : 1'b0;
assign raddr	= (~o_ready_n & ~lw_rn)?la[2+REG_ADDR_WIDTH-1:2] : {REG_DATA_WIDTH{1'b0}};/*---------------------------------------------------------------------------------------*/
// tri-state control
assign ld_oen	= ~ren;
assign o_ld		= rdata;endmodule

思久欲知 , 知繁渴思 , 唯圣祂奇 , 毋为所困 思久欲知,知繁渴思,唯圣祂奇,毋为所困 思久欲知,知繁渴思,唯圣祂奇,毋为所困

$$
思久欲知,知繁渴思,唯圣祂奇,毋为所困
$$

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

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

相关文章

【python】jupyter notebook导出pdf和pdf不显示中文问题

文章目录 写在前面1. 使用jupyter notebook导出pdf1.1 安装Pandoc1.2 安装MiKTex1.3 示例导出pdf 2. 中文显示问题2.1 显示中文问题示例2.2 解决办法1&#xff1a;修改tex2.3 解决办法2&#xff1a;修改内置文件 写在前面 使用jupyter notebook导出pdf时&#xff0c;出现了一些…

KVM创建虚拟机可访问外网+可使用Xshell等工具连接

创建虚拟机时使用桥接网络模块即可&#xff0c;如下&#xff1a; 1、创建一个存储卷(虚拟机的磁盘) 2、创建虚拟机时选择网络 3、系统安装完成后配置固定IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOTyes BOOTPROTOstatic IPADDR16.32.15.60 GATEWAY16.32.15.2…

统计学补充概念-13-逻辑回归

概念 逻辑回归&#xff08;Logistic Regression&#xff09;实际上是一种用于解决分类问题的统计学习方法&#xff0c;尽管其名称中带有"回归"一词&#xff0c;但它主要用于处理分类任务。逻辑回归用于预测一个事件发生的概率&#xff0c;并将其映射到一个特定的输出…

QtWidgets和QtQuick融合(QML与C++融合)

先放一个界面效果吧&#xff01; 说明&#xff1a;该演示程序为一个App管理程序&#xff0c;可以将多个App进行吸入管理。 &#xff08;动画中的RedRect为一个带有QSplashScreen的独立应用程序&#xff09; 左侧边栏用的是QQuickView进行.qml文件的加载&#xff08;即QtQuick…

寻找注册配置中心最佳评测官,赢取丰厚奖品 | 测评开启,开发者请速速集结

评测前请点击文末链接&#xff0c;领取 MSE-Nacos 免费试用&#xff0c;再启动评测。 注册配置中心 MSE-Nacos (以下简称 MSE-Nacos)&#xff0c;即 Nacos 的企业版&#xff0c;开箱即用的 Nacos 云服务&#xff0c;对 Nacos 内核进行企业级稳定性加固&#xff0c;故障自动检测…

01-Flask-简介及环境准备

Flask-简介及环境准备 前言简介特点Flask 与 Django 的比较环境准备 前言 本篇来介绍下Python的web框架–Flask。 简介 Flask 是一个轻量级的 Web 框架&#xff0c;使用 Python 语言编写&#xff0c;较其他同类型框架更为灵活、轻便且容易上手&#xff0c;小型团队在短时间内…

C++string类

目录 一、为什么学习string 二、标准库中的string类 2.1 string类的简介 2.2 成员类型 2.3 成员函数 2.3.1 构造、析构与运算符重载 2.3.2 迭代器 2.3.3 容量 2.3.4 元素的存取 2.3.5 修改 2.3.6 字符串操作 2.4 成员常量 2.5 非成员函数重载 三、string编程题练…

【韩顺平 零基础30天学会Java】数组、排序和查找(2days)

数组、排序、查找和多维数组 数组可以存放多个同一类型的数据。数组也是一种数据类 型&#xff0c;是引用数据类型。 定义一个数组 double[] hens {3,5,1,3.4,2,50} 遍历数组得到数组所有元素的和 hens[下标]&#xff0c;下标是从0开始编号的。 可以通过数组名.lenght得到数组…

azure data studio SQL扩展插件开发笔记

node.js环境下拉取脚手架 npm install -g yo generator-azuredatastudio yo azuredatastudio 改代码 运行 调试扩展&#xff0c;在visual studio code中安装插件即可 然后visual studio code打开进行修改运行即可 image.png 运行后自动打开auzre data studio了&#xff0c; 下面…

如何使用CSS实现一个平滑滚动到页面顶部的效果(回到顶部按钮)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平滑滚动到页面顶部的效果&#xff08;回到顶部按钮&#xff09;⭐ 创建HTML结构⭐ 编写CSS样式⭐ 编写JavaScript函数⭐ 添加滚动事件监听器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右…

HBase--技术文档--基本概念--《快速扫盲》

官网 Apache HBase – Apache HBase™ Home 阿里云hbase 云数据库HBase_大数据存储_订单风控_数据库-阿里云 云数据库 HBase-阿里云帮助中心 基本概念 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。它基于Hadoop&#xff0c;采用列式存储方式&#xff0c;可…

TCP协议的重点知识点

TCP协议的重点知识点 TCP(传输控制协议)是一种面向连接、可靠的数据传输协议,工作在传输层,提供可靠的字节流服务。它是互联网协议栈中最重要、最复杂的协议之一,也是面试中常被问到的知识点。本文将详细介绍TCP协议的各个重要概念。 TCP基本特性 TCP主要具有以下基本特性: …

【面试题】前端面试复习6---性能优化

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 性能优化 一、性能指标 要在 Chrome 中查看性能指标&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Chrome 浏览器&#xff0c;并访问你想要测试…

4G显存即可使用SDXL:离线、开源、免费#Fooocus初体验

Midjourney CEO | David Holz, 2019 &#xff1a; 用户可以忘记所有这些复杂的技术参数&#xff0c;只享受人与计算机之间的交互&#xff0c;“探索新的思维媒介&#xff0c;扩展人类的想象力” Fooocus 用开源和离线的方式挑战 Midjourney。Fooocus 是一款开源的图像生成项目…

视频汇聚平台EasyCVR安防视频监控平台新增经纬度选取功能的详细介绍

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

【CSS】定位 ( 子元素绝对定位 父元素相对定位 | 代码示例 )

一、子元素绝对定位 父元素相对定位 绝对定位 要和 带有定位 的 父容器 搭配使用 ; 子元素 使用绝对定位 , 父元素要使用 相对定位 ; 子元素使用 绝对定位 , 在布局中不会保留其位置 , 子元素完全依赖 父容器 的位置 , 此时就要求父容器必须稳定 , 如果父容器使用了 绝对布…

LLMs多任务指令微调Multi-task instruction fine-tuning

多任务微调是单任务微调的扩展&#xff0c;其中训练数据集包括多个任务的示例输入和输出。在这里&#xff0c;数据集包含指导模型执行各种任务的示例&#xff0c;包括摘要、评论评分、代码翻译和实体识别。 您在这个混合数据集上训练模型&#xff0c;以便它可以同时提高模型在…

c++11 标准模板(STL)(std::basic_ostringstream)(一)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allo…

【黑马头条之热点文章kafkaStream】

本笔记内容为黑马头条项目的热点文章-实时计算部分 目录 一、实时流式计算 1、概念 2、应用场景 3、技术方案选型 二、Kafka Stream 1、概述 2、Kafka Streams的关键概念 3、KStream 4、Kafka Stream入门案例编写 5、SpringBoot集成Kafka Stream 三、app端热点文章…