CN110362527B - 应用于fpga内部模块数据交换的系统 - Google Patents

应用于fpga内部模块数据交换的系统 Download PDF

Info

Publication number
CN110362527B
CN110362527B CN201910581899.3A CN201910581899A CN110362527B CN 110362527 B CN110362527 B CN 110362527B CN 201910581899 A CN201910581899 A CN 201910581899A CN 110362527 B CN110362527 B CN 110362527B
Authority
CN
China
Prior art keywords
data
address
bus
value
signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910581899.3A
Other languages
English (en)
Other versions
CN110362527A (zh
Inventor
刘超
孙宏伟
邹金欣
周睿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
716th Research Institute of CSIC
Jiangsu Jari Technology Group Co Ltd
Original Assignee
716th Research Institute of CSIC
Jiangsu Jari Technology Group Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 716th Research Institute of CSIC, Jiangsu Jari Technology Group Co Ltd filed Critical 716th Research Institute of CSIC
Priority to CN201910581899.3A priority Critical patent/CN110362527B/zh
Publication of CN110362527A publication Critical patent/CN110362527A/zh
Application granted granted Critical
Publication of CN110362527B publication Critical patent/CN110362527B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明提供了一种应用于FPGA内部模块数据交换的系统,包括data_in功能模块、data_out功能模块、module1文件模块、module2文件模块及overall顶层文件模块。各文件结构层次从顶层向下依次为顶层文件overall、元件module1及实例module1和元件module2及实例module2、元件data_in及实例和元件data_out及实例(data4_out和data6_out)。地址总线address、数据总线data、写信号wr、读信号rd、时钟clk及复位reset通过端口映射的方式贯穿了从顶层向下的各文件结构。

Description

应用于FPGA内部模块数据交换的系统
技术领域
本发明涉及一种FPGA并行总线数据通信及内部文件结构层次设计技术,特别是一种应用于FPGA内部模块数据交换的系统。
背景技术
FPGA(Field-Programmable Gate Array,即现场可编程门阵列),内部包括可配置逻辑模块CLB(Configurable Logic Block)、输入输出模块IOB(Input Output Block)和内部连线(Interconnect)三个部分,具有设计周期最短、开发费用最低、风险最小等特点,在通信设备的高速接口电路设计、数字信号处理等领域得到了广泛的应用。在很多应用场合中,FPGA作为实现某些特定功能的逻辑控制单元需要跟其它控制器件如DSP、CPU、GPU、ASIC等进行通信和数据交互的,并行总线通信方式是应用较多的一种方式。在进行较大规模FPGA程序设计时,并行数据收发机制的处理、存储空间与总线间的映射关系处理、文件结构层次组织等是进行FPGA程序设计时需要重点考虑的问题之一。
发明内容
本发明的目的在于提供一种应用于FPGA内部模块数据交换的系统。
实现本发明目的的技术方案为:一种应用于FPGA内部模块数据交换的系统,包括data_in功能模块、data_out功能模块、module1文件模块、module2文件模块及overall顶层文件模块;data_in功能模块实现数据总线data及地址总线address向module1文件模块、module2文件模块进行数据传递与地址映射,data_out功能模块实现module1文件模块、module2文件模块向数据总线data及地址总线address进行数据传递与地址映射,module1文件模块、module2文件模块分别实现特定的功能,overall顶层文件模块通过数据总线、地址总线及各读写时序控制端口等与外部控制器直接进行数据交换,同时通过数据总线、地址总线、各读写时序控制端口及寄存器等与内部各功能模块实现数据的交换。
进一步地,data_in功能模块包括端口port与进程process;其中
端口port由时钟clk、地址总线address、数据总线data、实例地址instance_addr、实例指令instance_cmd、数据写入状态标志Flag_dataIn及写信号wr组成;
进程process由process1和process2组成,两进程均由clk事件驱动,
process1在时钟clk上升沿到来时,如果同时检测到写信号为低电平wr=‘0’且实例地址等于总线地址instance_addr=address,则将总线数据赋予实例指令instance_cmd<=data,
process2在时钟clk上升沿到来时,如果同时检测到写信号上升沿rising_edge(wr)且实例地址等于总线地址instance_addr=address,则将1赋予数据写入状态标志Flag_dataIn<=‘1’;在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或实例地址不等于总线地址instance_addr/=address,则将0赋予数据写入状态标志Flag_dataIn<=‘0’。
进一步地,data_out模块包括端口port与进程process。
端口port由时钟clk、地址总线address、数据总线data、实例地址instance_addr、实例数据instance_data及读信号rd组成;
进程process由clk事件驱动,在时钟clk上升沿到来时,如果同时检测到读信号上升沿rising_edge(rd)且实例地址等于总线地址instance_addr=address,则将实例数据赋予数据总线data<=instance_data;反之,在时钟clk上升沿到来时,如果没有同时检测到读信号上升沿rising_edge(rd)或实例地址不等于总线地址instance_addr/=address,则将高阻态赋予数据总线data<=(others=>‘Z’)。
进一步地,module1模块包括端口port、信号signal及变量variable定义、元件声明及实例化component;其中
端口port由复位reset、时钟clk、地址总线address、数据输入总线datain、数据输出总线dataout、写信号wr及读信号rd组成;
定义变量address1、address2、address4及address5为常量类型,定义信号Flag_dataIn1、data1、Flag_dataIn2、data2、data4及data5;
声明元件data_out及元件data_in并实例化,其中,元件data_in具有data_in1和data_in2两个实例,元件data_out具有data_out4和data_out5两个实例;
根据模块data_in及模块data_out的定义及描述,在module1元件声明及实例化后可实现如下功能:
data_in1,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address1的值address=address1,则将数据总线的值赋予信号data1<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address1的值address=address1,则1赋予数据写入状态标志Flag_dataIn 1<=‘1’;反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address1的值address/=address1,则将0赋予数据写入状态标志Flag_dataIn1<=‘0’;
data_in2,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address2的值address=address2,则将数据总线的值赋予信号data2<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address2的值address=address2,则1赋予数据写入状态标志Flag_dataIn 2<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address2的值address/=address2,则将0赋予数据写入状态标志Flag_dataIn2<=‘0’;
data_out4,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address4的值address=address4,则将信号data4赋予数据输出总线dataout<=data4;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address4的值address4/=address,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’);
data_out5,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address5的值address=address5,则将信号data5赋予数据输出总线dataout<=data5;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address5的值address5/=address,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
进一步地,module2模块包括端口port、信号signal及变量variable定义、元件声明及实例化component;其中
端口port由复位reset、时钟clk、地址总线address、数据输入总线datain、数据输出总线dataout、写信号wr及读信号rd组成;
定义变量address3及address6为常量类型,定义信号Flag_dataIn3、data3及data6;
声明元件data_out及元件data_in并实例化,其中,元件data_in具有data_in3实例,元件data_out具有data_out6实例;
根据模块data_in及模块data_out的定义及描述,在module2元件声明及实例化后可实现如下功能:
data_in3,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address3的值address=address3,则将数据总线的值赋予信号data3<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address3的值address=address3,则1赋予数据写入状态标志Flag_dataIn 3<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address3的值address/=address3,则将0赋予数据写入状态标志Flag_dataIn3<=‘0’;
data_out6,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address6的值address=address6,则将信号data6赋予数据输出总线dataout<=data6;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address6的值address6/=address,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
进一步地,overall文件模块包括端口port、信号signal定义、元件声明及实例化component及进程process;其中
端口port由复位reset、时钟clk、地址总线address、数据总线data、片选信号cs、读信号rd及写信号wr组成;
定义信号module1_dataIn、module2_dataIn、module1_dataOut及module2_dataOut;
进程process包括process1和process2;其中
process1由片选信号cs及写信号wr事件驱动,当检测到片选信号为低电平cs=‘0’且写信号为低电平wr=‘0’时,如果地址总线的值等于1或2,即address=1or address=2,则将数据总线的值赋予信号module1_dataIn,即module1_dataIn<=data;如果地址总线的值等于3,即address=3,则将数据总线的值赋予信号module2_dataIn,即module2_dataIn<=data;
process2由片选信号cs及读信号rd事件驱动,当检测到片选信号为低电平cs=‘0’且读信号为低电平rd=‘0’时,如果地址总线的值等于4或5,即address=4or address=4,则将信号module1_dataOut的值赋予数据总线,即data<=module1_dataOut;如果地址总线的值等于6,即address=6,则将信号module2_dataOut的值赋予数据总线,即data<=module2_dataOut;
声明元件module1及元件module2并实例化,其中,元件module1具有module1实例,元件module2具有module2实例;
根据模块module1及模块module2的定义及描述,在overall元件声明及实例化后可实现如下功能:
module1,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于1或2,即address=1or address=2,则将信号module1_dataIn的值赋予数据输入总线datain,即datain<=module1_dataIn;在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于4或5,即address=4or address=5,则将数据输出总线dataout的值赋予信号module1_dataOut,即module1_dataOut<=dataout;
module2,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于3,即address=3,则将信号module2_dataIn的值赋予数据输入总线datain,即datain<=module2_dataIn;在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于6,即address=6,则将数据输出总线dataout的值赋予信号module2_dataOut,即module2_dataOut<=dataout。
本发明与现有技术相比,具有以下优点:所有的信号(data1-data6)均相当于对应唯一地址的存储空间。在有大量类似此类信号使用及数据交换的场合,本发明提供的层次化设计方法可有效简化内部模块间的数据交换机制,并提高代码的可读性、扩展性及维护性。
下面结合说明书附图对本发明作进一步描述。
附图说明
图1为data_in文件结构及组成示意图。
图2为data_out文件结构及组成示意图。
图3为module1文件结构及组成示意图。
图4为module2文件结构及组成示意图。
图5为overall文件结构及组成示意图。
图6为总线与内部模块之间数据流示意图。
具体实施方式
一种应用于FPGA内部模块数据交换的系统,包括data_in功能模块、data_out功能模块、module1文件模块、module2文件模块及overall顶层文件模块。其中module1文件模块包括变量address1、变量address2、变量address4、变量address5,module2文件模块包括变量address3、变量address6,overall顶层文件模块信号module1_dataIn、信号module2_dataIn、信号module1_dataOut、信号module2_dataOut。各文件结构层次从顶层向下依次为顶层文件overall、元件module1和元件module2、元件data_in和元件data_out。地址总线address、数据总线data、写信号wr、读信号rd、时钟clk及复位reset通过端口映射的方式贯穿了从顶层向下的各文件结构。
如图1所示,data_in模块为本发明实现数据总线data及地址总线address向功能模块module数据传递与地址映射的主要模块,data_in模块包括端口port与进程process。
端口port由时钟clk、地址总线address、数据总线data、实例地址instance_addr、实例指令instance_cmd、数据写入状态标志Flag_dataIn及写信号wr组成,各端口的方向及数据类型定义见图1data_in文件描述。
进程process由process1和process2组成,两进程均由clk事件驱动。process1在时钟clk上升沿到来时,如果同时检测到写信号为低电平wr=‘0’且实例地址等于总线地址instance_addr=address,则将总线数据赋予实例指令instance_cmd<=data;process2在时钟clk上升沿到来时,如果同时检测到写信号上升沿rising_edge(wr)且实例地址等于总线地址instance_addr=address,则将1赋予数据写入状态标志Flag_dataIn<=‘1’;反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或实例地址不等于总线地址instance_addr/=address,则将0赋予数据写入状态标志Flag_dataIn<=‘0’。
如图2所示,data_out模块为本发明实现功能模块module向数据总线data及地址总线address进行数据传递与地址映射的主要模块,data_out模块包括端口port与进程process。
端口port由时钟clk、地址总线address、数据总线data、实例地址instance_addr、实例数据instance_data及读信号rd组成,各端口的方向及数据类型定义见图2data_out文件描述。
进程process由clk事件驱动,在时钟clk上升沿到来时,如果同时检测到读信号上升沿rising_edge(rd)且实例地址等于总线地址instance_addr=address,则将实例数据赋予数据总线data<=instance_data;反之,在时钟clk上升沿到来时,如果没有同时检测到读信号上升沿rising_edge(rd)或实例地址不等于总线地址instance_addr/=address,则将高阻态赋予数据总线data<=(others=>‘Z’)。
如图3所示,module1为一个独立的功能模块,可实现特定的功能1,具体可通过进程process1、process2等描述和实现,本例不阐述实现的特定功能及实现方式,此处仅描述文件结构及数据传递机制。
module1模块包括端口port、信号signal及变量variable定义、元件声明及实例化component、进程porcess等。
端口port由复位reset、时钟clk、地址总线address、数据输入总线datain、数据输出总线dataout、写信号wr及读信号rd组成,各端口的方向及数据类型定义见图3module1文件描述。
定义变量address1、address2、address4及address5为常量类型,定义信号Flag_dataIn1、data1、Flag_dataIn2、data2、data4及data5,各变量与信号的数据类型及初始值见图3module1文件描述。
声明元件data_out及元件data_in并实例化,其中,元件data_in具有data_in1和data_in2两个实例,端口映射方式见图3module1文件描述;元件data_out具有data_out4和data_out5两个实例,端口映射方式见图3module1文件描述。
进程process1及process2等不在此处详细描述。
根据模块data_in及模块data_out的定义及描述,在module1元件声明及实例化后可实现如下功能:
data_in1,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address1的值address=address1,则将数据总线的值赋予信号data1<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address1的值address=address1,则1赋予数据写入状态标志Flag_dataIn 1<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address1的值address/=address1,则将0赋予数据写入状态标志Flag_dataIn1<=‘0’。
data_in2,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address2的值address=address2,则将数据总线的值赋予信号data2<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address2的值address=address2,则1赋予数据写入状态标志Flag_dataIn 2<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address2的值address/=address2,则将0赋予数据写入状态标志Flag_dataIn2<=‘0’。
data_out4,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address4的值address=address4,则将信号data4赋予数据输出总线dataout<=data4;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address4的值address4/=address,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
data_out5,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address5的值address=address5,则将信号data5赋予数据输出总线dataout<=data5;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address5的值address5/=address,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
如图4所示,module2为另一个独立的功能模块,可实现特定的功能2,具体可通过进程process1、process2等描述和实现,本例不阐述实现的特定功能及实现方式,此处仅描述文件结构及数据传递机制。
module2模块包括端口port、信号signal及变量variable定义、元件声明及实例化component、进程porcess等。
端口port由复位reset、时钟clk、地址总线address、数据输入总线datain、数据输出总线dataout、写信号wr及读信号rd组成,各端口的方向及数据类型定义见图4module2文件描述。
定义变量address3及address6为常量类型,定义信号Flag_dataIn3、data3及声明元件data_out及元件data_in并实例化,其中,元件data_in具有data_in3实例,端口映射方式见图4module2文件描述;元件data_out具有data_out6实例,端口映射方式见图4module2文件描述。
进程process1及process2等不在此处详细描述。
根据模块data_in及模块data_out的定义及描述,在module2元件声明及实例化后可实现如下功能:
data_in3,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address3的值address=address3,则将数据总线的值赋予信号data3<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address3的值address=address3,则1赋予数据写入状态标志Flag_dataIn 3<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address3的值address/=address3,则将0赋予数据写入状态标志Flag_dataIn3<=‘0’。
data_out6,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address6的值address=address6,则将信号data6赋予数据输出总线dataout<=data6;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address6的值address6/=address,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
如图5所示,overall是FPGA程序的顶层文件模块,该文件模块通过数据总线、地址总线及各读写时序控制端口等与外部控制器直接进行数据交换,同时通过数据总线、地址总线、各读写时序控制端口及寄存器等与内部各功能模块实现数据的交换。
overall文件模块包括端口port、信号signal定义、元件声明及实例化component及进程process等。
端口port由复位reset、时钟clk、地址总线address、数据总线data、片选信号cs、读信号rd及写信号wr组成,各端口的方向及数据类型定义见图5overall文件描述。
定义信号module1_dataIn、module2_dataIn、module1_dataOut及module2_dataOut,各信号的数据类型见图5overall文件描述。
进程process包括process1和process2,其中process1由片选信号cs及写信号wr事件驱动,当检测到片选信号为低电平cs=‘0’且写信号为低电平wr=‘0’时,如果地址总线的值等于1或2,即address=1or address=2,则将数据总线的值赋予信号module1_dataIn,即module1_dataIn<=data;如果地址总线的值等于3,即address=3,则将数据总线的值赋予信号module2_dataIn,即module2_dataIn<=data。
process2由片选信号cs及读信号rd事件驱动,当检测到片选信号为低电平cs=‘0’且读信号为低电平rd=‘0’时,如果地址总线的值等于4或5,即address=4or address=4,则将信号module1_dataOut的值赋予数据总线,即data<=module1_dataOut;如果地址总线的值等于6,即address=6,则将信号module2_dataOut的值赋予数据总线,即data<=module2_dataOut。
声明元件module1及元件module2并实例化,其中,元件module1具有module1实例,端口映射方式见图5overall文件描述;元件module2具有module2实例,端口映射方式见图5overall文件描述。
根据模块module1及模块module2的定义及描述,在overall元件声明及实例化后可实现如下功能:
module1,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于1或2,即address=1or address=2,则将信号module1_dataIn的值赋予数据输入总线datain,即datain<=module1_dataIn;在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于4或5,即address=4or address=5,则将数据输出总线dataout的值赋予信号module1_dataOut,即module1_dataOut<=dataout。
module2,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于3,即address=3,则将信号module2_dataIn的值赋予数据输入总线datain,即datain<=module2_dataIn;在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于6,即address=6,则将数据输出总线dataout的值赋予信号module2_dataOut,即module2_dataOut<=dataout。
如图6所示,该图描述了地址总线、数据总线与内部各功能模块之间数据交换的流向。根据图1-图5的描述可知,图6包括地址总线address、数据总线data、元件module1及实例化、元件module2及实例化、元件data_in及实例化、元件data_out及实例化、信号module1_dataIn、信号module2_dataIn、信号module1_dataOut、信号module2_dataOut,地址选择与判定三态门单元s1-s10。
各文件结构层次从顶层向下依次为overall、元件module1及实例化或元件module2及实例化、元件data_in及实例化或元件data_out及实例化。
地址总线address、数据总线data、写信号wr、读信号rd、时钟clk及复位reset通过端口映射的方式贯穿了从顶层向下的各文件结构
数据交换流向:
在wr=‘0’时,如果address=address1或address=address2,数据通过三态门s1由数据总线data流向信号module1_dataIn。分别地,当wr=‘0’且address=address1时,数据通过三态门s2由信号module1_dataIn流向元件实例data1_in,data1_in通过端口映射将数据传递到信号data1;当wr=‘0’且address=address2时,数据通过三态门s3由信号module1_dataIn流向元件实例data2_in,data2_in通过端口映射将数据传递到信号data2。
元件实例data4_out通过端口映射将数据由信号data4传递到data4_out,当rd=‘0’且address=address4时,数据通过三态门s4由data4_out流向信号module1_dataOut;元件实例data5_out通过端口映射将数据由信号data5传递到data5_out,当rd=‘0’且address=address5时,数据通过三态门s5由data5_out流向信号module1_dataOut。在rd=‘0’时,如果address=address4或address=address5,数据通过三态门s6由信号module1_dataOut流向数据总线data。
在wr=‘0’且address=address3,数据通过三态门s7由数据总线data流向信号module2_dataIn。当wr=‘0’且address=address3时,数据通过三态门s8由信号module2_dataIn流向元件实例data3_in,data3_in通过端口映射将数据传递到信号data3。
元件实例data6_out通过端口映射将数据由信号data6传递到data6_out,当rd=‘0’且address=address6时,数据通过三态门s9由data6_out流向信号module2_dataOut。在rd=‘0’且address=address6时,数据通过三态门s10由信号module2_dataOut流向数据总线data。
由上述分析可知,所有的信号(data1-data6)均相当于对应唯一地址的存储空间。在有大量类似此类信号使用及数据交换的场合,本发明提供的层次化设计方法可有效简化内部模块间的数据交换机制,并提高代码的可读性、扩展性及维护性。

Claims (5)

1.一种应用于FPGA内部模块数据交换的系统,其特征在于,包括data_in功能模块、
data_out功能模块、module1文件模块、module2文件模块及overall顶层文件模块;其中
data_in功能模块实现数据总线data及地址总线address向module1文件模块、module2文件模块进行数据传递与地址映射,
data_out功能模块实现module1文件模块、module2文件模块向数据总线data及地址总线address进行数据传递与地址映射,
module1文件模块、module2文件模块分别实现特定的功能,
overall顶层文件模块通过数据总线、地址总线及各读写时序控制端口与外部控制器直接进行数据交换,同时通过数据总线、地址总线、各读写时序控制端口及寄存器与内部各功能模块实现数据的交换;
data_in功能模块包括端口port与进程 process;其中
端口port由时钟clk、地址总线address、数据总线data、实例地址instance_addr、实例指令instance_cmd、数据写入状态标志Flag_dataIn及写信号wr组成;
进程process由process1和process2组成,两进程均由clk事件驱动, process1在时钟clk上升沿到来时,如果同时检测到写信号为低电平wr=‘0’且实例地址等于总线地址instance_addr=address,则将总线数据赋予实例指令instance_cmd<= data,
process2在时钟clk上升沿到来时,如果同时检测到写信号上升沿rising_edge(wr)且实例地址等于总线地址instance_addr=address ,则将1赋予数据写入状态标志Flag_dataIn<=‘1’;在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或实例地址不等于总线地址,则将0赋予数据写入状态标志Flag_dataIn<=‘0’。
2.根据权利要求1 所述的系统,其特征在于,data_out模块包括端口port与进程process;
端口port由时钟clk、地址总线address、数据总线data、实例地址instance_addr、实例数据instance_data及读信号rd组成;
进程process由clk事件驱动,在时钟clk上升沿到来时,如果同时检测到读信号上升沿rising_edge(rd)且实例地址等于总线地址instance_addr=address,则将实例数据赋予数据总线data<=instance_data;反之,在时钟clk上升沿到来时,如果没有同时检测到读信号上升沿rising_edge(rd)或实例地址不等于总线地址,则将高阻态赋予数据总线data<=(others=>‘Z’)。
3.根据权利要求1所述的系统,其特征在于,module1模块包括端口port、信号signal及变量variable定义、元件声明及实例化component;其中
端口port由复位reset、时钟clk、地址总线address、数据输入总线datain、数据输出总线dataout、写信号wr及读信号rd组成;
定义变量address1、address2、address4及address5为常量类型,定义信号Flag_
dataIn1、data1、Flag_dataIn2、data2、data4及data5;
声明元件data_out及元件data_in并实例化,其中,元件data_in具有data_in1和data_in2两个实例,元件data_out具有data_out4和data_out5两个实例;
根据模块data_in及模块data_out的定义及描述,在module1元件声明及实例化后可实现如下功能:
data_in1,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address1的值address=address1 ,则将数据总线的值赋予信号data1<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address1的值address=address1,则1赋予数据写入状态标志Flag_dataIn1<=‘1’;反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address1的值,则将0赋予数据写入状态标志Flag_dataIn1<=‘0’;
data_in2,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address2的值address=address2,则将数据总线的值赋予信号data2<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address2的值address=address2,则1赋予数据写入状态标志Flag_dataIn2<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address2的值,则将0赋予数据写入状态标志Flag_dataIn2<=‘0’;
data_out4,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address4的值address=address4 ,则将信号data4赋予数据输出总线dataout<=data4;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address4的值,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’) ;
data_out5,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address5的值address=address5 ,则将信号data5赋予数据输出总线dataout<=data5;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address5的值,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
4.根据权利要求1所述的系统,其特征在于,module2模块包括端口port、信号signal及变量variable定义、元件声明及实例化component;其中
端口port由复位reset、时钟clk、地址总线address、数据输入总线datain、数据输出总线dataout、写信号wr及读信号rd组成;
定义变量address3及address6为常量类型,定义信号Flag_dataIn3、data3及data6;声明元件data_out及元件data_in并实例化,其中,元件data_in具有data_in3实例,元件data_out具有data_out6实例;
根据模块data_in及模块data_out的定义及描述,在module2元件声明及实例化后可实现如下功能:
data_in3,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于变量address3的值address=address3,则将数据总线的值赋予信号data3<=datain;同时,在时钟clk上升沿到来时,如果检测到写信号的上升沿rising_edge(wr)且地址总线的值等于变量address3的值address=address3,则1赋予数据写入状态标志Flag_dataIn3<=‘1’,反之,在时钟clk上升沿到来时,如果没有检测到写信号上升沿rising_edge(wr)或地址总线的值不等于变量address3的值,则将0赋予数据写入状态标志Flag_dataIn3<=‘0’;
data_out6,在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于变量address6的值address=address6 ,则将信号data6赋予数据输出总线dataout<=data6;反之,在时钟clk上升沿到来时,如果没有检测到读信号上升沿rising_edge(rd)或地址总线的值不等于变量address6的值,则将高阻态赋予数据输出总线dataout<=(others=>‘Z’)。
5.根据权利要求1所述的系统,其特征在于,overall文件模块包括端口port、信号signal定义、元件声明及实例化component及进程process;其中
端口port由复位reset、时钟clk、地址总线address、数据总线data、片选信号cs、读信号rd及写信号wr组成;
定义信号module1_dataIn、module2_dataIn、module1_dataOut及module2_dataOut;进程process包括process1和process2;其中
process1由片选信号cs及写信号wr事件驱动,当检测到片选信号为低电平cs=‘0’且写信号为低电平wr=‘0’时,如果地址总线的值等于1或2,即address=1oraddress=2,则将数据总线的值赋予信号module1_dataIn,即 module1_dataIn<=data;如果地址总线的值等于3,即address=3,则将数据总线的值赋予信号module2_dataIn,即 module2_dataIn<= data;
process2由片选信号cs及读信号rd事件驱动,当检测到片选信号为低电平cs=‘0’且读信号为低电平rd=‘0’时,如果地址总线的值等于4或5,即address=4oraddress=4,则将信号module1_dataOut的值赋予数据总线,即data<=module1_dataOut;如果地址总线的值等于6 ,即add ress=6 ,则将信号mod ule2_da taOut的值赋予数据总线,即da ta<=module2_dataOut;
声明元件module1及元件module2并实例化,其中,元件module1具有module1实例,元件module2具有module2实例;
根据模块module1及模块module2的定义及描述,在overall元件声明及实例化后可实现如下功能:
module1,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于1或2,即address=1oraddress=2,则将信号 module1_dataIn的值赋予数据输入总线datain,即datain<=module1_dataIn;在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于4或5,即address=4oraddress=5,则将数据输出总线dataout的值赋予信号module1_dataOut,即module1_dataOut<=dataout;
module2,在时钟clk上升沿到来时,如果检测到写信号为低电平wr=‘0’且地址总线的值等于3 ,即address=3 ,则将信号module2_dataIn的值赋予数据输入总线datain ,即
datain<=module2_dataIn;在时钟clk上升沿到来时,如果检测到读信号为低电平rd=‘0’且地址总线的值等于6,即address=6,则将数据输出总线dataout的值赋予信号module2_dataOut,即module2_dataOut<=dataout。
CN201910581899.3A 2019-06-30 2019-06-30 应用于fpga内部模块数据交换的系统 Active CN110362527B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910581899.3A CN110362527B (zh) 2019-06-30 2019-06-30 应用于fpga内部模块数据交换的系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910581899.3A CN110362527B (zh) 2019-06-30 2019-06-30 应用于fpga内部模块数据交换的系统

Publications (2)

Publication Number Publication Date
CN110362527A CN110362527A (zh) 2019-10-22
CN110362527B true CN110362527B (zh) 2023-06-30

Family

ID=68217587

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910581899.3A Active CN110362527B (zh) 2019-06-30 2019-06-30 应用于fpga内部模块数据交换的系统

Country Status (1)

Country Link
CN (1) CN110362527B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101072152A (zh) * 2007-06-18 2007-11-14 中兴通讯股份有限公司 一种寻址控制器件及使用该器件进行寻址的方法
CN102594331A (zh) * 2011-12-29 2012-07-18 中国西电电气股份有限公司 基于fpga内部的一种模拟并行接口电路及其实现方法
US20170133104A1 (en) * 2015-11-11 2017-05-11 Imagination Technologies Limited Hardware Monitor to Verify Memory Units

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101072152A (zh) * 2007-06-18 2007-11-14 中兴通讯股份有限公司 一种寻址控制器件及使用该器件进行寻址的方法
CN102594331A (zh) * 2011-12-29 2012-07-18 中国西电电气股份有限公司 基于fpga内部的一种模拟并行接口电路及其实现方法
US20170133104A1 (en) * 2015-11-11 2017-05-11 Imagination Technologies Limited Hardware Monitor to Verify Memory Units

Also Published As

Publication number Publication date
CN110362527A (zh) 2019-10-22

Similar Documents

Publication Publication Date Title
CN102023942B (zh) Spi外设访问装置及方法
CN100397783C (zh) 触发器电路
US8269524B2 (en) General purpose input/output pin mapping
CN101599052A (zh) 总线接口设计装置和总线接口设计方法
CN101609442B (zh) 一种接口自适应的方法及其装置、系统
US9673824B2 (en) Techniques and circuitry for configuring and calibrating an integrated circuit
US20060001445A1 (en) Programmable logic block for designing an asynchronous circuit
US9257987B1 (en) Partial reconfiguration using configuration transaction layer packets
CN104424154A (zh) 通用串行外围接口
CN104239259A (zh) 用于与动态可重配置电路进行通信的桥接电路
CN110362527B (zh) 应用于fpga内部模块数据交换的系统
CN103019303B (zh) 时序路径上保持时间的调节装置与方法
CN101651673A (zh) 一种片上可编程系统连接到以太网的方法
CN101661429B (zh) 一种统计信息的存储方法及设备
CN100461134C (zh) 一种外部存储器控制器及基于外部存储器控制器的地址变换的方法
US11093434B2 (en) Communication system and operation method
CN108459876A (zh) 用于缩减面积的控制寄存器电路的方法与装置
CN103853692B (zh) 一种基于中断判断机制的多处理器数据通讯方法
CN111506529B (zh) 一种应用于flash的高速spi指令应答电路
US7631211B1 (en) Sharing elements in multiple data-rate I/O
CN209842616U (zh) 一种基于fpga的i2c/spi配置ip核
US7869452B1 (en) Dataflow FIFO communication buffer using highly-multiported memories
US20220244867A1 (en) Fabric Memory Network-On-Chip Extension to ALM Registers and LUTRAM
JPS60171735A (ja) 半導体集積回路装置
CN103594110A (zh) 替代双端口静态存储器的存储器结构

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 222061 No.18, Shenghu Road, Lianyungang City, Jiangsu Province

Applicant after: The 716th Research Institute of China Shipbuilding Corp.

Applicant after: JIANGSU JARI TECHNOLOGY GROUP Co.,Ltd.

Address before: 222061 No.18, Shenghu Road, Lianyungang City, Jiangsu Province

Applicant before: 716TH RESEARCH INSTITUTE OF CHINA SHIPBUILDING INDUSTRY Corp.

Applicant before: JIANGSU JARI TECHNOLOGY GROUP Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant