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 40MHz
    input wire                          clk         ,
    // Global Reset from PCI 9054
    input wire                          areset_n    ,
    // Local Bus Interface
    input 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 interface
    output 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)
begin
	if(~areset_n)
		current_state <= SM_IDLE;
	else
		current_state <= next_state;
end

// combinational logic
always@(*)
case(current_state)
	SM_IDLE:
		if(~ads_n)
			next_state = SM_TRANSFER;
		else
			next_state = SM_IDLE;
	SM_TRANSFER:
		if(~blast_n)
			next_state = SM_SINGLE_WAIT;
		else
			next_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;
		else
			next_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 logic

assign 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



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





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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全国城市内涝排涝模拟技术及在市政、规划设计中应用教程

详情点击链接&#xff1a;全国城市内涝排涝模拟技术及在市政、规划设计中应用教程 一&#xff0c;数据准备 通过标准化的步骤&#xff0c;利用CAD数据、GIS数据&#xff0c;在建模的不同阶段发挥不同软件的优势&#xff0c;实现高效的数据处理、准确的参数赋值、模型的快速建…

【TA 挖坑03】雾效 | 透光材质 | Impostor | 厚度转球谐

仍旧是记录下半年想要做的东西&#xff0c;很有趣&#xff0c;实现“一团雾效” “面片也有立体感” 等等效果的一些技术上的方法。 仅粗浅记录&#xff0c;保证之后自己填坑的时候看得懂就行&#xff01; 透光 -> 透光材质ShadingModel 《永劫无间》透光材质的渲染&…

matlab面向对象

一、面向对象编程 1.1 面向过程与面向对象 区别&#xff1a; 面向过程的核心是一系列函数&#xff0c;执行过程是依次使用每个函数面向对象的核心是对象&#xff08;类&#xff09;及其属性、方法&#xff0c;每个对象根据需求执行自己的方法以解决问题 对象&#xff1a;单个…

nginx代理webSocket链接,webSocket频繁断开重连

一、场景 1、使用nginx代理webSocket链接&#xff0c;消息发送和接收都是正常的&#xff0c;但webSocket链接会频繁断开重连 2、如果不使用nginx代理则一切正常 3、程序没有做webSocket心跳处理 如下图 二、nginx代理配置 upstream cloud_ass {#ip_hash;server 192.168.1.…

MyBatis的核心技术掌握,简单易懂

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛&#xff1f;&#xff1f; 三.MyBatis 中的结果映射 1. resultType&#xff1a; 2. resultMap&#xff1a; ---问题 ---…

蓝奥声智能工业安全用电监测与智慧能源解决方案

能源管理变得越来越重要。如今&#xff0c;能源成本已成为国内预算的核心因素&#xff0c;因此用电监控对大多数现代企业来说都很重要。许多企业在日常能源消耗监控中面临着一些挑战&#xff0c;因为它们的规模庞大&#xff0c;基础设施多样化&#xff0c;灵活性低&#xff0c;…

k8s ingress (二)

k8s ingress (二) Ingress介绍 在前面课程中已经提到&#xff0c;Service对集群之外暴露服务的主要方式有两种&#xff1a;NodePort和LoadBalancer&#xff0c;但是这两种方式&#xff0c;都有一定的缺点&#xff1a; NodePort方式的缺点是会占用很多集群机器的端口&#xff0…

无涯教程-TensorFlow - XOR实现

在本章中&#xff0c;无涯教程将学习使用TensorFlow的XOR实现&#xff0c;在TensorFlow中开始XOR实施之前&#xff0c;看一下XOR表值。这将帮助了解加密和解密过程。 A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 XOR密码加密方法基本上用于加密&#xff0c;即通过生成与适当密钥匹配…

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

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

二、SQL注入之联合查询

文章目录 1、SQL注入原理2、SQL注入的原因3、SQL注入的危害4、SQL注入基础4.1 MySQL相关4.2 SQL注入流程&#xff1a; 5、联合注入实例基本步骤6、总结 1、SQL注入原理 SQL注入(Sql Injection&#xff09;就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串&…

【深度学习-图像识别】使用fastai对Caltech101数据集进行图像多分类(50行以内的代码就可达到很高准确率)

文章目录 前言fastai介绍数据集介绍 一、环境准备二、数据集处理1.数据目录结构2.导入依赖项2.读入数据3.模型构建3.1 寻找合适的学习率3.2 模型调优 4.模型保存与应用 总结人工智能-图像识别 系列文章目录 前言 fastai介绍 fastai 是一个深度学习库&#xff0c;它为从业人员…

项目解决问题

红外 没接收到红外信号时&#xff0c; 会有杂波干扰 STC单片机 STC的串口要用一个定时器作为波特率发生器 开定时器2需要 开定时器0 1 要ET0 1 ET11打开 串口有时候和定时器有冲突 串口发送函数放定时器中断函数中&#xff0c;时间太少可能会导致一直卡在定时器中AUXR | 0x…

计算机视觉:比SAM快50倍的分割一切视觉模型FastSAM

目录 引言 1 FastSAM介绍 1.1 FastSAM诞生 1.2 模型算法 1.3 实验结果 2 FastSAM运行环境构建 2.1 conda环境构建 2.2 运行环境安装 2.3 模型下载 3 FastSAM运行 3.1 命令行运行 3.1.1 Everything mode 3.1.2 Text prompt 3.1.3 Box prompt (xywh) 3.1.4 Points p…

科技云报道:云计算下半场,公有云市场生变,私有云风景独好

科技云报道原创。 大数据、云计算、人工智能&#xff0c;组成了恢弘的万亿级科技市场。这三个领域&#xff0c;无论远观近观&#xff0c;都如此性感和魅力&#xff0c;让一代又一代创业者为之杀伐攻略。 然而高手过招往往一瞬之间便已胜负知晓&#xff0c;云计算市场的巨幕甫…

Threejs学习05——球缓冲几何体背景贴图和环境贴图

实现随机多个三角形随机位置随机颜色展示效果 这是一个非常简单基础的threejs的学习应用&#xff01;本节主要学习的是球面缓冲几何体的贴图部分&#xff0c;这里有环境贴图以及背景贴图&#xff0c;这样可以有一种身临其境的效果&#xff01;这里环境贴图用的是一个.hdr的文件…

opencv 进阶16-基于FAST特征和BRIEF描述符的ORB(图像匹配)

在计算机视觉领域&#xff0c;从图像中提取和匹配特征的能力对于对象识别、图像拼接和相机定位等任务至关重要。实现这一目标的一种流行方法是 ORB&#xff08;Oriented FAST and Rotated Brief&#xff09;特征检测器和描述符。ORB 由 Ethan Rublee 等人开发&#xff0c;结合了…

IDEA中导入多module的Maven项目无法识别module的解决办法

首先举个栗子 这是正常的多module工程&#xff08;spring cloud项目&#xff09; 正常工程.png 这是导入出现问题的多module工程 导入出现问题的工程.png 原因&#xff1a; 出现该问题&#xff0c;是由于打开工程的时候IDEA只编译了最外层的pom.xml文件&#xff0c;而内部的…

【分享】华为设备登录安全配置案例

微思网络www.xmws.cn&#xff0c;2002年成立&#xff0c;专业IT认证培训21年&#xff0c;面向全国招生&#xff01; 微 信 号 咨 询&#xff1a; xmws-IT 华为HCIA试听课程&#xff1a;超级实用&#xff0c;华为VRP系统文件详解【视频教学】华为VRP系统文件详解 华为HCIA试听课…

机器学习在大数据分析中的应用

文章目录 机器学习在大数据分析中的原理机器学习在大数据分析中的应用示例预测销售趋势客户细分和个性化营销 机器学习在大数据分析中的前景和挑战前景挑战 总结 &#x1f389;欢迎来到AIGC人工智能专栏~探索机器学习在大数据分析中的应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

Android SDK 上手指南||第四章 应用程序结构

第四章 应用程序结构 本教程将主要以探索与了解为主要目的&#xff0c;但后续的系列文章则将进一步带大家深入学习如何创建用户界面、响应用户交互操作以及利用Java编排应用逻辑。我们将专注于大家刚刚开始接触Android开发时最常遇到的项目内容&#xff0c;但也会同时涉及一部…