CN110362527A - 应用于fpga内部模块数据交换的系统 - Google Patents
应用于fpga内部模块数据交换的系统 Download PDFInfo
- Publication number
- CN110362527A CN110362527A CN201910581899.3A CN201910581899A CN110362527A CN 110362527 A CN110362527 A CN 110362527A CN 201910581899 A CN201910581899 A CN 201910581899A CN 110362527 A CN110362527 A CN 110362527A
- Authority
- CN
- China
- Prior art keywords
- data
- address
- signal
- value
- bus
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
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(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 (6)
1.一种应用于FPGA内部模块数据交换的系统,其特征在于,包括data_in功能模块、data_out功能模块、module1文件模块、module2文件模块及overall顶层文件模块;其中
data_in功能模块实现数据总线data及地址总线address向module1文件模块、module2文件模块进行数据传递与地址映射,
data_out功能模块实现module1文件模块、module2文件模块向数据总线data及地址总线address进行数据传递与地址映射,
module1文件模块、module2文件模块分别实现特定的功能,
overall顶层文件模块通过数据总线、地址总线及各读写时序控制端口等与外部控制器直接进行数据交换,同时通过数据总线、地址总线、各读写时序控制端口及寄存器等与内部各功能模块实现数据的交换。
2.根据权利要求1所述的系统,其特征在于,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’。
3.根据权利要求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)或实例地址不等于总线地址instance_addr/=address,则将高阻态赋予数据总线data<=(others=>‘Z’)。
4.根据权利要求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的值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_dataIn2<=‘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’)。
5.根据权利要求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的值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’)。
6.根据权利要求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,即address=6,则将信号module2_dataOut的值赋予数据总线,即data<=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。
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 true CN110362527A (zh) | 2019-10-22 |
CN110362527B 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)
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 |
-
2019
- 2019-06-30 CN CN201910581899.3A patent/CN110362527B/zh active Active
Patent Citations (3)
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 |
---|---|
CN110362527B (zh) | 2023-06-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105814560B (zh) | 用于实现高吞吐量键-值存储的存储器设置 | |
CN104268078B (zh) | 一种基于参数化ip测试用例集合的芯片自动化验证方法 | |
US7660922B2 (en) | Mechanism to flexibly support multiple device numbers on point-to-point interconnect upstream ports | |
CN102023942B (zh) | Spi外设访问装置及方法 | |
Hiibner et al. | New 2-dimensional partial dynamic reconfiguration techniques for real-time adaptive microelectronic circuits | |
CN102495920B (zh) | 一种FPGA用基于PCIe的集成化逻辑分析模块 | |
CN101436171B (zh) | 模块化通信控制系统 | |
CN108776647A (zh) | 基于axi总线的多ddr控制器管理模块 | |
CN101599052A (zh) | 总线接口设计装置和总线接口设计方法 | |
US20040122990A1 (en) | Distributed configuration storage | |
CN107111572A (zh) | 用于避免死锁的方法和电路 | |
US9257987B1 (en) | Partial reconfiguration using configuration transaction layer packets | |
CN105892359A (zh) | 一种多dsp并行处理系统及其处理方法 | |
CN105404728B (zh) | 一种基于fpga芯片多控制信号的布局方法 | |
CN107003838A (zh) | 解码信息库 | |
CN102929329B (zh) | 片上系统间互连网络的动态重构方法 | |
CN107145465A (zh) | 串行外设接口spi的传输控制方法、装置及系统 | |
CN110362527A (zh) | 应用于fpga内部模块数据交换的系统 | |
CN104598404B (zh) | 计算设备扩展方法和装置、以及可扩展的计算系统 | |
CN104050121B (zh) | 双收双发可编程arinc429通讯接口芯片 | |
CN104360876B (zh) | 一种基于sopc的boot启动与fpga配置方法及装置 | |
US8671383B2 (en) | Viewing and debugging HDL designs having SystemVerilog interface constructs | |
CN107291652A (zh) | 一种并行通信方法 | |
CN111209234A (zh) | 一种基于Avalon-MM总线接口的多串口IP核 | |
CN203191975U (zh) | 一种dsp与pxi总线接口 |
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 |