FPGA capable of realizing data transmission between different configuration application processes

文档序号:1846535 发布日期:2021-11-16 浏览:23次 中文

阅读说明:本技术 可实现不同配置应用过程间数据传递的fpga (FPGA capable of realizing data transmission between different configuration application processes ) 是由 单悦尔 徐彦峰 陈波寅 井站 于 2021-08-19 设计创作,主要内容包括:本发明公开了一种可实现不同配置应用过程间数据传递的FPGA,涉及FPGA技术领域,该FPGA内部包括硬件存储器,硬件存储器的写端口和读端口分别通过绕线路径连接可编程逻辑资源,硬件存储器中的数据在可编程逻辑资源的非正常运行阶段保持不变,利用该硬件存储器可以将一个配置应用过程中的用户设计产生的运行数据传递给之后的配置应用过程中的用户设计在运行时使用,拓展了FPGA的功能,可以满足多种不同场景下的应用需要。(The invention discloses an FPGA (field programmable gate array) capable of realizing data transmission among different configuration application processes, and relates to the technical field of FPGAs.)

1. An FPGA capable of realizing data transmission among different configuration application processes is characterized in that the FPGA internally comprises a programmable logic resource, a configuration memory and a hardware memory, a write port and a read port of the hardware memory are respectively connected with the programmable logic resource through a winding path, and data in the hardware memory are kept unchanged in an abnormal operation stage of the programmable logic resource;

in the first configuration application process of the FPGA, the FPGA downloads a first configuration code stream corresponding to a first user design and stores the first configuration code stream in the configuration memory, and after the first configuration code stream is downloaded, the FPGA forms the first user design by utilizing programmable logic resources based on the first configuration code stream in the configuration memory; the first user design writes the generated first operation data into the hardware memory for storage according to a preset format in the operation process;

in the second configuration application process of the FPGA, the FPGA downloads a second configuration code stream corresponding to a second user design and stores the second configuration code stream in the configuration memory, after the second configuration code stream is downloaded, the FPGA forms a second user design by utilizing programmable logic resources based on the second configuration code stream in the configuration memory, and the second user design reads the first operation data from the hardware memory according to the preset format and operates in combination with the first operation data.

2. The FPGA of claim 1, wherein the abnormal operation stage of the programmable logic resource comprises a stage between the stop of power supply of the programmable logic resource and the power-on again, and a stage of the FPGA performing a code stream downloading operation and a resetting operation in a normal power supply process;

wherein the reset operation performed by the FPGA comprises at least one of power-on reset, global reset and partial reset.

3. The FPGA of claim 2, wherein the hardware memory is a memory with independent uninterruptible power supply, or the hardware memory is a memory manufactured by NVM process; and the write port of the hardware memory maintains a default value during an abnormal operation stage of the programmable logic resource.

4. The FPGA of claim 3 wherein said hardware memory is a RAM memory or a FIFO memory with independent uninterrupted power supply.

5. The FPGA of claim 3, wherein when the hardware memory is a memory with an independent uninterruptible power supply, the memory is connected to an external independent uninterruptible power supply through an independent power supply pin of the FPGA, or the memory is connected to an independent uninterruptible power supply inside the FPGA through a winding path.

6. The FPGA of claim 5, wherein the programmable logic resource is connected to a write port of the hardware memory through an input buffer, a read port of the hardware memory is connected to the programmable logic resource through an output buffer, and a default value providing circuit is further provided at an input end of the input buffer and is powered by an independent uninterruptible power supply of the hardware memory.

7. The FPGA of claim 6 wherein said default value providing circuit is a pull-up circuit or a bus hold circuit.

8. The FPGA of any one of claims 1-7, wherein said first user design and said second user design are different user designs, and wherein said first configuration code stream and said second configuration code stream are different.

9. The FPGA of any one of claims 1-7, wherein said first user design and said second user design are a same user design, and wherein said first configuration code stream and said second configuration code stream are the same.

10. The FPGA of claim 9 wherein said first configuration application process and said second configuration application process are two different operational stages of an operational process of a same user design, said first operational data being used to characterize an operational state of said first user design at said first configuration application process, said second user design operating at said second configuration application process in conjunction with said first operational data reverting to the operational state of said first configuration application process.

11. The FPGA of claim 10 wherein said FPGA is powered down when said first user-designed corresponding operational phase is complete, power to said programmable logic resource ceases, and said first configuration application process ends.

12. The FPGA of claim 10 wherein said programmable logic resource is powered down and said first configuration application process ends when said FPGA experiences a power failure error during said first user design run.

13. The FPGA of any one of claims 1-7, wherein said first user design is updated to form said first operational data by overwriting data into said hardware memory at predetermined intervals during operation.

14. The FPGA of any one of claims 1-7, wherein bit widths read from and written to said hardware memory by user design are set by control signals generated by user design.

15. The FPGA of any one of claims 1-7, wherein said first user design and said second user design have the same or different bit widths for reading from and writing to said hardware memory.

16. The FPGA of any one of claims 1-7, wherein the hardware memory is a memory with ECC function, or the hardware memory is a memory with an ECC circuit connected thereto.

17. The FPGA of any one of claims 1-7, wherein said FPGA is a multi-die structure comprising a plurality of dies, and said hardware memory is integrated into one of said FPGA dies, or said hardware memory is a separate die.

Technical Field

The invention relates to the technical field of FPGA, in particular to an FPGA capable of realizing data transmission among different configuration application processes.

Background

With the development of very large scale integrated circuit technology, an FPGA (Field Programmable Gate Array) chip is widely used depending on its superior interface performance, abundant logic and IP resources, and flexible and convenient Field Programmable capability.

The FPGA chip is internally provided with a configurable module and a winding resource, and when the user design is mapped to the FPGA chip, the user design can determine the function realized by the configurable module in the FPGA chip and the winding path selected by the winding resource by defining configuration content (the content of a configuration bit), so that the function realized by the FPGA chip is defined. The FPGA design software carries out the sum-up, layout and wiring processing on the user design input, maps the user design input to the FPGA chip, and generates a code stream file according to the preset format according to the configuration content of the configurable module and the winding resource. The code stream is downloaded to a configuration memory on the FPGA chip, each configuration content can be correctly filled, the function of the FPGA chip is defined, in order to keep the correctness of the FPGA circuit, before the FPGA is started, the content of the configuration position is temporarily separated from a configured module, the circuit damage caused by circuit conflict (such as short circuit and large current caused) caused by incomplete configuration in the downloading process is avoided, after the code stream is downloaded and all code stream data are written into the configuration position, the code stream data in all the configuration positions can be simultaneously used for configuring each configured module, and the FPGA chip can realize the user design function after being started and operated.

And if the FPGA chip needs to be switched to realize other user design functions, powering off the FPGA chip, downloading a new code stream from the outside of the chip to the configuration memory again, and restarting to operate the new user design function through the flow. The process that the FPGA chip completes code stream downloading and starts operation in the power-off state is regarded as a one-time configuration application process of the FPGA chip, the same FPGA chip can be repeatedly utilized to carry out multiple configuration application processes, different configuration application processes of the FPGA chip are mutually independent at present and cannot carry out data transmission, and the application of the FPGA chip is limited.

Disclosure of Invention

The invention provides an FPGA capable of realizing data transmission among different configuration application processes aiming at the problems and the technical requirements, and the technical scheme of the invention is as follows:

an FPGA capable of realizing data transmission among different configuration application processes comprises a programmable logic resource, a configuration memory and a hardware memory, wherein a write port and a read port of the hardware memory are respectively connected with the programmable logic resource through a winding path, and data in the hardware memory are kept unchanged in an abnormal operation stage of the programmable logic resource;

in the first configuration application process of the FPGA, the FPGA downloads a first configuration code stream corresponding to the first user design and stores the first configuration code stream in a configuration memory, and after the first configuration code stream is downloaded, the FPGA forms the first user design by utilizing programmable logic resources based on the first configuration code stream in the configuration memory; the first user design writes the generated first operation data into a hardware memory according to a preset format for storage in the operation process;

in the second configuration application process of the FPGA, the FPGA downloads a second configuration code stream corresponding to a second user design and stores the second configuration code stream in a configuration memory, after the second configuration code stream is downloaded, the FPGA forms the second user design by utilizing programmable logic resources based on the second configuration code stream in the configuration memory, and the second user design reads first operation data from a hardware memory according to a preset format and operates in combination with the first operation data.

The further technical scheme is that the abnormal operation stage of the programmable logic resource comprises a stage from the power supply stop of the programmable logic resource to the power supply again, and a stage of the FPGA executing code stream downloading operation and resetting operation in the normal power supply process;

the reset operation executed by the FPGA comprises at least one of power-on reset, global reset and partial reset.

The further technical scheme is that the hardware memory is a memory with an independent uninterrupted power supply, or the hardware memory is a memory manufactured by adopting an NVM (non-volatile memory) process; and the write port of the hardware memory maintains a default value during an abnormal operation phase of the programmable logic resource.

The further technical scheme is that the hardware memory is a RAM memory or a FIFO memory with an independent uninterrupted power supply.

The further technical scheme is that when the hardware memory is a memory with an independent uninterruptible power supply, the memory is connected with an external independent uninterruptible power supply through an independent power supply pin of the FPGA, or the memory is connected with an internal independent uninterruptible power supply of the FPGA through a winding path.

The further technical scheme is that the programmable logic resource is connected with a write port of the hardware memory through an input buffer, a read port of the hardware memory is connected with the programmable logic resource through an output buffer, the input end of the input buffer is also provided with a default value providing circuit, and the default value providing circuit is powered by an independent uninterruptible power supply of the hardware memory.

The further technical scheme is that the default value providing circuit is a pull-up circuit or a bus maintaining circuit.

The further technical scheme is that the first user design and the second user design are different user designs, and the first configuration code stream and the second configuration code stream are different.

The further technical scheme is that the first user design and the second user design are the same user design, and the first configuration code stream and the second configuration code stream are the same.

The method comprises the following steps that a first configuration application process and a second configuration application process are two different operation stages in the operation process of the same user design, first operation data are used for representing the operation state of the first user design in the first configuration application process, and the second user design is combined with the first operation data to operate in the second configuration application process and recover to the operation state of the first configuration application process.

The further technical scheme is that the FPGA is powered off when the operation of the operation stage corresponding to the first user design is finished, the power supply of the programmable logic resource is stopped, and the first configuration application process is finished.

According to a further technical scheme, when the FPGA generates a power failure error in the first user design operation process, the power supply of the programmable logic resource is stopped, and the first configuration application process is finished.

The further technical scheme is that the first user designs that in the operation process, data is written into a hardware memory in a covering mode at preset time intervals to be updated to form first operation data.

The further technical scheme is that the bit width of reading and writing of the hardware memory designed by a user is set by a control signal generated by the user design.

The further technical scheme is that the read-write bit width of the hardware memory is the same or different between the first user design and the second user design.

The further technical scheme is that the hardware memory is a memory with an ECC function, or the hardware memory is a memory connected with an ECC circuit.

The further technical scheme is that the FPGA is a multi-die structure comprising a plurality of dies, and the hardware memory is integrated in one of the FPGA dies, or the hardware memory is an independent die.

The invention has the beneficial effects that:

the application discloses an FPGA capable of realizing data transmission among different configuration application processes, the FPGA comprises a hardware memory capable of keeping internal data unchanged in an abnormal operation stage of programmable logic resources, and the hardware memory can be used for transmitting operation data generated by user design in one configuration application process to a user design in a subsequent configuration application process to be used in operation, so that the functions of the FPGA are expanded, and application requirements under different scenes can be met.

The FPGA can realize different user designs in different configuration application processes of data transmission, so that one FPGA can be applied in a time-sharing manner to respectively realize a plurality of user designs, and the data transmission among different user designs can be realized without using an additional chip except the FPGA.

The FPGA can realize the same user design for the operation of different configuration application processes of data transmission, so that on one hand, the pressure of the FPGA on long-time operation can be reduced by temporarily storing intermediate results to execute the segmentation of a user design with a longer complete operation process. On the other hand, the task can be continuously operated when the power failure occurs, the operation is not required to be started from the beginning, and the operation reliability is improved.

Drawings

Fig. 1 is a schematic diagram of an internal structure of an FPGA according to an embodiment of the present application.

Fig. 2 is a schematic diagram of data transfer between configuration applications of the FPGA of the present application.

Detailed Description

The following further describes the embodiments of the present invention with reference to the drawings.

The application discloses an FPGA capable of realizing data transfer between different configuration application processes, as shown in fig. 1, the FPGA includes, in addition to programmable logic resources and configuration memory in a conventional FPGA chip, an additionally added hardware memory M1, and the hardware memory M1 is realized by fixed hardware resources in an ASIC manner, but not by programmable logic resources in the FPGA. The filled diagrams in fig. 1 represent programmable logic resources, which are arranged in a determinant structure inside the FPGA according to a common Column-Based architecture, and fig. 1 is only a simple diagram and does not show all structural relationships inside a conventional FPGA.

The write port and the read port of the hardware memory M1 are connected to the programmable logic resource through routing paths, respectively. Specifically, the programmable logic resource is connected to a write port of the hardware memory M1 through an input buffer, and a read port of the hardware memory M1 is connected to the programmable logic resource through an output buffer. The conventional programmable logic resource mainly comprises a wiring resource and a programmable module, and the write port and the read port of the actual hardware memory M1 are usually connected to the wiring resource and then connected to the programmable module by the wiring resource, so as to realize data transmission between the programmable logic resource and the hardware memory M1.

In one embodiment, the hardware memory M1 is a normally volatile memory with an independent uninterruptible power supply, independent meaning independent from the power supply of the programmable logic resources of the FPGA, as in fig. 1, the programmable logic resources are powered by Vcore, while the memories in the hardware memory M1 are powered by VM1 provided by an independent uninterruptible power supply. When the power supply of the programmable logic resource is disconnected, the power supply of the hardware memory M1 is still stable and uninterrupted, and the stored content is ensured not to be lost. Optionally, hardware memory M1 is a RAM memory or FIFO memory with independent uninterrupted power supply. There are two main implementations of the independent uninterruptible power supply of the hardware memory M1: one implementation mode is that the independent uninterruptible power supply is an external power supply of the FPGA, and the memory is connected with an external independent uninterruptible power supply through an independent power supply pin of the FPGA. Another implementation is to integrate the independent uninterruptible power supply package inside the FPGA, for example, as shown in fig. 1, the memory is connected to the independent uninterruptible power supply inside the FPGA through a winding path.

In another embodiment, where hardware memory M1 is a memory fabricated by NVM technology, such as a conventional FLASH technology, hardware memory M1 may be powered by the same power as the programmable logic resource, and even if the power is cut off, the contents stored in hardware memory M1 are not lost.

No matter what structure the hardware memory is implemented, the write port of the hardware memory M1 maintains a default value during the abnormal operation phase of the programmable logic resource. One embodiment provides the following: a write port of the hardware memory M1 is provided with a default value providing circuit, a specific default value providing circuit is provided at an input end of the input buffer, and the default value providing circuit is a pull-up circuit (pullup circuit) or a bus hold circuit (bus holder circuit). The default value providing circuit is powered by the independent uninterruptible power supply, i.e., the hardware memory when the hardware memory M1 has the independent uninterruptible power supply; when the hardware memory M1 does not have an independent uninterruptible power supply, the default value providing circuit is powered by the independent uninterruptible power supply, and there are two implementation manners, i.e., a built-in implementation manner and an external implementation manner, which are not described herein. Since the default provisioning circuitry also requires the use of a separate uninterruptible power supply, a more common implementation of the hardware memory M1 is a normally volatile memory in combination with a separate uninterruptible power supply. Due to the existence of the default value providing circuit, the input signal provided by the programmable logic resource is added with the default value and is input into the hardware memory M1, so that the input of the hardware memory M1 can maintain the default value and has no influence on the input in the abnormal operation stage of the programmable logic resource.

Since the data in the hardware memory M1 can remain unchanged when the power supply of the programmable logic resource is disconnected, and the write port of the hardware memory M1 remains at the default value during the abnormal operation phase of the programmable logic resource, the data in the hardware memory M1 can remain unchanged during the abnormal operation phase of the programmable logic resource. The abnormal operation stage of the programmable logic resource comprises a stage from the power supply stop of the programmable logic resource to the power-on again, and a stage in which the FPGA executes code stream downloading operation and resetting operation in the normal power supply process. The power supply stop of the programmable logic resource comprises power supply stop caused by normal power-off and power supply stop caused by power failure. The reset operation performed by the FPGA includes at least one of a power-on reset, a global reset, and a partial reset.

When the FPGA of the present application is in operation, in a first configuration application process of the FPGA, the FPGA downloads a first configuration code stream corresponding to a first user design and stores the first configuration code stream in a configuration memory, as shown in an implementation part in fig. 2. After the first configuration code stream is downloaded, the FPGA is electrified to start reset, and a first user design is formed by utilizing programmable logic resources based on the first configuration code stream in the configuration memory. The first user design writes the generated first operation data into the hardware memory M1 in a predetermined format during operation, and the first operation data is all or part of data generated during the operation of the first user design, and is usually more important part data considering the limited storage space, including predefined execution result data that needs to be transmitted to the subsequent configuration application process, and/or data for representing the operation state of the user design during the configuration application process.

During the first configuration application process, the first user design may be written only once for the data to be stored, that is, at the end of the first configuration application process, the corresponding data is written into the hardware memory M1 to form the first operation data. Or, the first user design is written in an overwriting manner for multiple times, that is, the first user design writes corresponding data in the hardware memory M1 in an overwriting manner at predetermined intervals during the operation process to update the corresponding data to form first operation data, so that not only can the first operation data finally stored in the hardware memory M1 be ensured to be the latest data, but also the reliability is higher, and the problem that the data cannot be written in when the first configuration application process is finished due to a sudden error in the operation process of the first user design can be avoided.

When the first configuration application process of the FPGA is finished, in another second configuration application process of the FPGA, the FPGA downloads a second configuration code stream corresponding to the second user design and stores the second configuration code stream in the configuration memory, as shown by a dotted line portion in fig. 2. After the second configuration code stream is downloaded, the FPGA is electrified to start reset, and a second user design is formed by utilizing the programmable logic resource based on the second configuration code stream in the configuration memory. Because the data in the hardware memory M1 can be kept unchanged in the abnormal operation stage of the programmable logic resource, at this time, the hardware memory M1 still stores the first operation data written by the first user design, and the second user design reads the first operation data from the hardware memory according to the predetermined format and operates in combination with the first operation data, thereby realizing the data transmission between the two configuration application processes.

The first user design writes the first operation data into the hardware memory M1 in a preset format, the second user design is taken out for use according to the same format, and the bit widths of the two user designs for reading and writing the hardware memory are the same or different. The bit width of the read/write bits of the hardware memory M1 designed by the user is not determined by the configuration code stream, but is set by the control signal generated by the user design.

The application scenarios of data transfer between two configuration application processes implemented by the FPGA of the present application mainly include the following two types:

1. the first user design and the second user design are different user designs, and the first configuration code stream and the second configuration code stream are different. In this scenario, it is often the case that the first configuration application process is finished after the first user design is run on the FPGA, and the second configuration application process is finished after the second user design is run on the FPGA, that is, one configuration application process is a complete running process of the corresponding user design. However, in some special cases, a first user design may end a first configuration application process during the operation of the FPGA, and a second user design may end a second configuration application process during the operation of the FPGA, that is, one configuration application process is a part of the operation process of the corresponding user design.

In any case, in the application scenario, a plurality of user designs can be respectively realized by applying one FPGA in a time-sharing manner, and data transmission among different user designs can be realized without using an additional chip except the FPGA.

2. The first user design and the second user design are the same user design, and the first configuration code stream and the second configuration code stream are the same. Similarly, in the application scenario, similar to the application scenario, one configuration application process may be a complete operation process of a corresponding user design or a partial operation process, but the case that the next configuration application process is a partial operation process of a corresponding user design in the application scenario is more common, that is, the first configuration application process and the second configuration application process are two different operation stages in the operation process of the same user design, one user design ends to form the first configuration application process after operating one operation stage on the FPGA, and the user design may then operate subsequent operation stages on the FPGA to form the second configuration application process. In this case, the first operating data are therefore used to characterize the operating state of the first user design in the first configuration application process, and the second user design, when operating in conjunction with the first operating data, is restored to the operating state of the first configuration application process in the second configuration application process, i.e. is operated from the operating state of the first configuration application process.

In one embodiment, a plurality of relay points are preset for a complete operation process designed by a user to be divided into a plurality of operation stages, the FPGA is powered off when the operation of one operation stage is completed, the power supply of the programmable logic resource is stopped, the corresponding configuration application process is finished, the FPGA is powered on again after the operation is stopped and the operation is continued from the operation state of the last configuration application process, and the configuration application process corresponding to the next operation stage is started. That is, when the FPGA is powered off when the operation of the operation stage corresponding to the first user design is completed, the power supply of the programmable logic resource is stopped, the first configuration application process is ended, and the second configuration application process continues to operate from the operation state of the first configuration application process. The FPGA is very suitable for realizing a scene which is designed by a user and has a long complete operation process, and the operation task can be executed in a segmented manner by temporarily storing the intermediate result, so that the pressure of the FPGA on long-time operation is reduced.

In another embodiment, a power failure error occurs in a complete operation process of a user design to form a plurality of operation stages, when the power failure error occurs in the operation user design process of the FPGA, the power supply of the programmable logic resource is stopped, the current configuration application process is ended to form an operation stage, the FPGA is electrified again to download the same configuration code stream again, and the operation is continued from the operation state of the last configuration application process. That is, when the FPGA has a power failure error in the first user design operation process, the power supply of the programmable logic resource is stopped, the first configuration application process is ended, and the second configuration application process continues to operate from the operation state of the first configuration application process. The characteristic ensures that the FPGA is not influenced by the intermediate power failure in the process of operating a user design, and can continuously operate tasks when the power failure occurs without starting to operate from the beginning, thereby improving the operation reliability.

In another optional embodiment, the hardware memory M1 is a memory with an ECC function, or the hardware memory M1 is a memory connected with an ECC circuit, and the hardware memory M1 performs ECC check and error correction on the transferred data in addition to the function of implementing data transfer between different configuration applications, so as to ensure the accuracy of the transferred data and further improve the operational reliability of the FPGA.

The FPGA mentioned in the above embodiments is a single-die FPGA, or a multi-die FPGA, and when the FPGA is a multi-die structure including several dies, the hardware memory M1 is integrated in one of the FPGA dies, or the hardware memory M1 is a separate die inside the multi-die FPGA and connected to other FPGA dies.

It should be noted that the first configuration application process and the second configuration application process are any two configuration application processes of the FPGA, and it is a common case that the two configuration application processes are two continuous configuration application processes, that is, after the FPGA finishes the first configuration application process, the configuration application process executed next is the second configuration application process. However, the two configuration application processes may also be discontinuous configuration application processes, for example, after the FPGA finishes the first configuration application process, the FPGA continues to execute another configuration application process, for example, a third configuration application process, but the third configuration application process does not modify the first operation data in the hardware memory, after the third configuration application process is finished, the hardware memory still stores the first operation data, and at this time, when the FPGA executes the second configuration application process, the FPGA still can read the first operation data from the hardware memory, so as to implement the data transfer process. In the third configuration application process, the corresponding user design may read only or not read or not write the first operating data in the hardware memory, and it is ensured that the first operating data in the hardware memory is not modified, so that the user design in each configuration application process may not interact with the data in the hardware memory, and may also read only or not write or write and read again when interacting with the data in the hardware memory.

The actual FPGA may have more configuration application processes, and the process of implementing data transfer between the first configuration application process and the second configuration application process described in the above embodiments may be applied between any two configuration application processes, where one configuration application process may serve as the second configuration application process to read the running data stored in the previous configuration application process from the hardware memory in one scenario, and simultaneously serve as the first configuration application process to write the running data generated by itself into the hardware memory to transfer to the subsequent configuration application process in another scenario, so as to form a plurality of data transfer processes. For example, the user design a writes the operation data a into the hardware memory M1 in the configuration application process a, the user design B reads the operation data a from the hardware memory M1 and generates the operation data B to write into the hardware memory M1 in the configuration application process B, the user design C reads the operation data B from the hardware memory M1 and generates the operation data C to write into the hardware memory M1 in the configuration application process C, and so on. When each configuration application process corresponds to the same user design and the user design modifies the read operation data in each configuration application process to generate new operation data, the FPGA can realize common machine learning application through the configuration application processes which mutually transmit data.

In addition, the FPGA can also be compatible with the application of a conventional FPGA chip, that is, the hardware memory M1 is used as a common memory to store data, and is not used for realizing data transfer between different configuration application processes.

10页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:基于奇偶校验提高FPGA运行可靠性的方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类