FPGA专题(个人用)-程序员宅基地

技术标签: fpga开发  

FPGA重点复习(牛客网总结)

持续更新,随时补充和总结

1.亚稳态产生的原因是什么?它稳定之后的结果是确定的吗?

个人回答亚稳态就是介于0和1之间不确定的状态,稳定之后结果不确定。

解题思路:产生的原因:在数字电路中,如果数据传输的过程中不满足建立时间和保持时间,或者是复位信号释放不满足恢复时间,则电路会产生亚稳态。 亚稳态稳定之后的结果:亚稳态需要经过大于等于决断时间的时间之后才会回到一个确定的状态,但是这个结果是随机地稳定到0或者1上。

2.异步FIFO当中为什么要使用格雷码?

个人回答:防止产生亚稳态

解题思路: :为了能够使得在电路发生亚稳态等异常的时候能够使得FIFO的判空和判满不会发生致命的错误二进制码在进做判空或判满操作时,数据的所有bit位都会发生变化。如果地址变化的时候,由于时钟发生抖动等因素造成了亚稳态,最后稳定下来,地址的每一个bit都会随机地稳定到0或者1,如对于一个深度为4的FIFO而言,若此时写入地址为010,那么下一次写入的地址应该是011,并且是为满的状态。但是若发生亚稳态,则有地址可能编程100或者010,造成地址的超前或者滞后,并且判空判满做出了错误的判断。而使用格雷码,因为每一次只有一个bit的数据发生变化,所以地址的变化即使发生了亚稳态,也不会对FIFO的工作产生致命性错误。在地址变化的过程中,若发生亚稳态,此时地址只可能是不变化或者是变成正常情况下的下一地址2种情况,最坏的情况只会是它本身,把上一次写的数据给覆盖掉,FIFO的判空和判满不会发生致命的错误。依旧以深度为4的FIFO举例,若此时地址所对应的格雷码为11(对应十进制的地址2),它的下一状态应该是10,并且是满状态。若发生了亚稳态,最坏情况就是把11种的数据替换掉,而不会发生地址超前或者滞后的情况。因此对FIFO的空满判断不会造成致命的影响。

网上找的别的回答 我觉得不错:

格雷码的关键不在于发生亚稳态的概率小了,而在于——即使发生了亚稳态,也没问题。
写模块和读模块是在同一个芯片上的,用的是同样的触发器,既然快时钟域的时序满足:
Tclock-to-q+Tcomb+Tsetup<Tperiod
(这里的Tcomb至少是一个mux和一个binary-to-gray转换器的组合路径延时加上线延时)
那么,在慢时钟域,如果这一次的transition发生了亚稳态问题,一定有:
Tlast_change≈Tperiod>>Tsetup
即上一次变化的那位一定是满足Setup time的!

也就是说,使用了格雷码之后,在慢时钟域,产生亚稳态问题的只可能有一位,这一位是随机的,但不管这一位是0还是1,要么是变化后的值,要么是变化前的值,这两个值都是历史上出现过的!然后这个信号再经过两级的同步触发器,达到判断空满标志的模块中,此时,也许我们的快时钟域的指针还在不断向前奔波,但我们要的就是保守判断,只要够保守,就不会有问题。
这也正是格雷码设计的初衷——不会检测到中间态,如果是二进制,从0111到1000,当发生了亚稳态的时候,有可能会经过既不是0111又不是1000的中间态,这个中间态有可能会超前,也有可能滞后,总之不是我们想要的,都有可能会引起问题。

原文链接:https://blog.csdn.net/qq_43365647/article/details/102660669

3.latch是如何产生的,如果在时序电路中会不会产生latch?

个人回答::锁存器是电平触发 ,毛刺影响电路

解题思路::Latch只会发生在组合逻辑电路中。如果在组合逻辑电路中的代码书写逻辑不完整,如有if没有else,有case没有default,就会产生latch。Latch对于时序分析非常不友好。如果一个模块中既有时序电路,又有组合逻辑电路,尽量避免latch的产生。在时序电路中不会产生latch。

4.在FPGA中,BRAM和DRAM有什么区别?

个人回答: :BRAM是块RAM。DRAM是分布式RAM。

解题思路: :BRAM是块RAM,在FPGA中是以块为单位出现,它的输出需要给时钟。BRAM在FPGA中是一种单独的定制资源,它对时序分析相较于DRAM要友好得多。但是它是以块为单位出现的,即使使用了BRAM中的一小部分,这块BRAM就无法再次使用。DRAM是分布式RAM,它是使用FPGA中的LUT(查找表资源)来进行搭建的,因此DRAM会占用FPGA中的LUT资源。DRAM不需要时钟进行驱动,并且使用较为灵活,可以定制任意大小的DRAM。 一般而言,少量数据使用DRAM存储,大量数据采用BRAM存储。对时序要求高的电路使用BRAM。

5.AXI4总线有哪些通道,为什么会没有读响应通道

个人回答::写地址,写数据,写响应,读地址,读数据。

解题思路::AXI4总线包括以下5个通道:写地址通道、写数据通道、写响应通道、读数据通道、读地址通道。 没有读响应通道的原因:因为读数据通道可以从接收端接收到数据,因此它也有AXI4读响应功能,因此不需要再额外开辟一条读响应通道。

6.FPGA的资源有哪些

解题思路
(1)IOB可编程输入输出单元 (2)可编程逻辑块 (3)数字时钟管理模块 (4)BRAM (5)布线资源 (6)底层内嵌功能单元——PLL(锁相环)、DSP等 一般会针对LUT、BRAM和DRAM进行深入提问

7.reg型和always块变量可以用在组合逻辑电路中吗?

个人回答:可以,reg可以用在always里,always块可以用于组合逻辑电路。注意:「时序电路」和「组合电路」不同。「时序电路」的输出不仅受现在输入状态的影响,还要受过去输入状态的影响。

解题思路::reg型和always块变量可以用在组合逻辑电路中。此时always块的写法不再是时序电路中由时钟来进行驱动,而是写成always@(*)。此后reg型变量在always块中进行运算即可。

8.如果存在时序违例,它们有何影响?可以如何修复?

解题思路: 时序违例分为2类:建立时间违例和保持时间违例。
建立时间违例的发生,会导致数据没有充足的时间在时钟上升沿到来之前做好准备,从而可能导致采集到的数据不正确。
建立时间违例的修复方法有以下2种: (1)改用速度更快的器件,降低触发器时钟边沿到数据输出端的响应时间,以增大留给建立时间的时间余量。 (2)缩短电路中的逻辑。如果在电路中2级D触发器之间的组合逻辑电路逻辑深度过深或者逻辑过长,可以考虑分步进行,将一段长的逻辑分成两个或者多个步骤分别实现,以减小每个时钟周期内Tp-logic逻辑运算时间,从而增大留给建立时间的时间余量。
保持时间违例的发生,会导致前一个周期的数据尚未打入后一级电路就被冲掉。 保持时间违例的修复方法有以下4种: (1)改用速度慢一些的器件,增加器件响应时间,从而增大Tcq时间,以增大留给保持时间的时间余量。 (2)加长2级D触发器中组合逻辑电路中的逻辑,加长逻辑运算时间Tp-logic。以增大留给保持时间的时间余量。 (3)加延迟缓冲。如可以加2级反相器。在不影响原有逻辑的基础上,加大数据传播所需要的时间,从而增大留给保持时间的时间余量。 (4)降低器件电压(不推荐)

9.两段式状态机和三段式状态机有何不同?

**解题思路:**两段式状态机有两个always块: 一个采用时序电路描述状态的转移方式,即当前状态和协议状态的跳转。另一个采用组合逻辑电路来输出相应状态的数据。 三段式状态机有三个always块: 一个采用时序电路描述当前状态和协议状态的跳转。一个采用组合逻辑电路来描述下一状态的转移条件,第三个采用组合逻辑电路来输出相应状态的数据。

10.latch和dff的区别是什么?

个人回答: latch 电平触发,dff是边沿触发

解题思路: Latch是锁存器,是受电平触发。DFF是触发器,是受时钟边缘触发。Latch容易产生毛刺,并且会使得静态时序分析变得复杂。在ASIC设计中使用Latch可以提高集成度,但是在FPGA中相反,因为FPGA中没有latch资源。DFF由于受时钟边缘触发,对电路的时序分析和时序控制友好,在ASIC设计中使用DFF会没有使用latch集成度高,但是在FPGA中由于有丰富的DFF资源,所以在FPGA中使用DFF比Latch集成度高。

11.SDRAM设计难点主要在什么地方?

解题思路:
SDRAM是同步动态随机存储器(Synchronous Dynamic Random Access Memory)的缩写,它是一种高速存储器,广泛应用于数字系统和FPGA中。在SDRAM设计中,主要有以下几个难点:

1.时序设计:SDRAM在读写数据时,需要根据时序进行访问控制。设计时需要考虑内部时序和外部时序的匹配,保证正确读写数据,同时考虑时序的优化,提高存储器的访问速度。

2.复杂的数据存取方式:SDRAM具有复杂的数据存取方式,需要在读写控制信号和数据信号之间进行复杂的转换。在设计时需要考虑数据存取方式的复杂性,确保信号传输的正确性和稳定性。

3.噪声问题:由于SDRAM需要高速读写数据,所以它对噪声和干扰非常敏感。在设计时需要采取措施,降低噪声和干扰对存储器读写的影响。

4.功耗问题:SDRAM的读写功耗比较大,在FPGA中使用时需要考虑功耗的控制,尽可能降低功耗,提高系统的可靠性和稳定性。

综上所述,SDRAM的设计难点主要集中在时序设计、数据存取方式、噪声和功耗等方面。在SDRAM的设计过程中,需要综合考虑这些因素,确保存储器的读写操作的正确性和稳定性,提高系统的可靠性和性能。

12.刷新请求到来时,读数据处于突发模式时,数据未突发完,此时来了刷新请求,如果等待一次突发完成以后可能导致刷新请求不能得到及时的响应,这时该怎么办

解题思路: 当刷新请求到来时,如果数据未突发完,需要立即停止当前的突发传输,并尽可能快地响应刷新请求。这可以通过以下几种方法来实现:

发送“中止”命令:FPGA控制器可以通过向SDRAM发送中止命令,以停止当前的突发传输。接下来,FPGA控制器可以处理刷新请求,并重新开始读取未读取的数据。但是,这种方法可能会浪费一些时间,因为SDRAM可能需要一些时间来处理中止命令。

使用写前读命令:写前读是一种SDRAM命令,它可以让SDRAM在写入数据之前读取数据。这个命令可以用于刷新请求,因为它可以让SDRAM在执行刷新操作之前读取未读取的数据。这种方法可以最大程度地减少对SDRAM的停顿时间,因为它可以在读取未读取的数据的同时响应刷新请求。

增加SDRAM的刷新间隔:如果在SDRAM刷新间隔之间允许更多的时间用于突发传输,那么在刷新请求到来时,可能会有更多的时间用于完成突发传输。但是,这可能会增加SDRAM的延迟时间,因此需要根据具体情况权衡利弊。

13.FPGA的内部组成?

解题思路: FPGA的内部组成主要包括三个部分:可编程逻辑单元(Configurable Logic Blocks,CLB)、可编程互连资源(Programmable Interconnect Resources,PIR)和输入/输出资源(I/O Blocks,IOBs)。

可编程逻辑单元(CLB)是FPGA最基本的计算单元,用于实现各种数字电路功能。每个CLB包含多个LUT(Lookup Table),寄存器,以及一些MUX、ALU、加法器等,可以进行任意的布尔运算、寄存器存储等操作。

可编程互连资源(PIR)是FPGA中实现信号传输的主要资源,包括可编程连接点、交叉开关、线缆等,可以将各个CLB中的逻辑单元连接起来,实现任意的数字电路连接。

输入/输出资源(IOBs)用于与外部设备进行数据交互,包括输入/输出端口、时钟管理器、数据缓存器、电压电平转换器等。IOBs可以实现与外部设备的数据通信,同时还可以实现时钟分频、时钟缓存等功能。

14.LE中查找表的实现原理?

解题思路: FPGA中的查找表(Look-Up Table,简称LUT)是FPGA实现逻辑功能的基本单元之一,其实现原理如下:

LUT是一种内部存储器,可存储K位输入的所有可能的输出结果,其中K称为查找表输入的位宽,LUT中的每个存储单元对应于一个K位输入组合,存储该组合对应的输出结果。在FPGA中,LUT通常是SRAM单元,其大小为2^K,K为LUT的输入位宽。

当FPGA需要实现一个逻辑功能时,就将输入信号通过MUX选择器选择到对应的LUT中,LUT中存储的输出结果即为逻辑功能的输出。

15.分布式RAM与块RAM有什么区别?

解题思路: 分布式RAM和块RAM都是FPGA中常见的存储器类型,它们的主要区别在于存储器的物理实现方式和功能。

分布式RAM是指由FPGA中的逻辑单元(LUT)构成的小型存储器单元,它们分散在FPGA的各个逻辑区域,具有非常低的延迟和高的吞吐量,适合于存储需要快速访问的小型数据集。分布式RAM的优点是速度快、占用面积小,但其存储容量通常比较有限。

块RAM则是一种大型存储器单元,通常由硬件IP核提供,包括存储器阵列、地址译码器、读写控制器等功能模块,适合于存储大量数据。块RAM的优点是存储容量大、存取速度快、实现方便,但其缺点是面积较大,会对FPGA资源产生较大的占用。

因此,在实际应用中,可以根据具体的需求来选择分布式RAM或块RAM。对于需要高速存储和访问小数据集的应用,可以使用分布式RAM;对于需要大容量存储的应用,则需要使用块RAM。

16.查找表与触发器是怎么构成分布式RAM的?

解题思路: 查找表(Lookup Table,简称LUT)和触发器(Flip-Flop)是构成分布式RAM的基本元素。具体实现方式如下:

首先,将输入地址分为两部分,高位地址和低位地址。高位地址通过解码器选择要访问的RAM块,低位地址用于选择RAM块中的行。

然后,将选择的RAM块中的每一行都表示为一个查找表,每个查找表包含N位输入和M位输出。查找表通过使用输入地址的低位地址来确定要选择的行,然后将输入地址的高位地址作为查找表的输入,得到查找表的输出。

最后,将查找表的输出连接到触发器的输入,触发器用于存储查找表的输出数据。这样,每个RAM块中的查找表和触发器组合在一起形成了分布式RAM。这种设计可以提高RAM访问速度和减少功耗。

17.全局时钟域与局部时钟的区别?

解题思路: 全局时钟域和局部时钟域是时序设计中常用的两个概念,它们的主要区别在于时钟信号的来源和传输方式。

全局时钟域指的是整个FPGA芯片中使用的相同时钟信号。在全局时钟域中,时钟信号从芯片外部输入,经过时钟网络分配到各个时钟域中,因此,各个时钟域中的时钟信号的相位和频率是一致的,也就是说,各个时钟域中的逻辑元件在相同的时钟边沿上进行操作,使得时序同步。

局部时钟域则指的是单独的时钟域,其时钟信号只影响该时钟域中的逻辑元件。在局部时钟域中,时钟信号通常从全局时钟域中派生而来,或者是由局部时钟信号和锁相环(PLL)等电路生成。由于时钟信号的传输受到局限,因此,局部时钟域中的时钟信号相位和频率可能会存在一定的偏差,需要特殊的时序设计技巧来避免时序异步问题的出现。

总之,全局时钟域和局部时钟域都是FPGA时序设计中非常重要的概念,需要根据具体的应用场景进行选择和配置。

18.IOB的主要组成部分?

解题思路: IOB(Input Output Block)是FPGA中用于输入输出的基本单元,其主要组成部分包括:
输入/输出缓冲器(Input/Output buffer,IOB):用于数据输入输出的缓冲器,负责与外部设备进行数据交换。
器件单元(Device element,DE):负责将输入信号转换为FPGA内部信号,或将FPGA内部信号转换为输出信号。
时钟缓冲器(Clock buffer,CB):用于产生时钟信号,并将时钟信号缓存。
复位器(Reset):提供复位信号,并通过复位信号重置器件单元和时钟缓冲器。
IOB可以通过调整缓冲器和器件单元的参数,实现不同的电气特性和信号处理功能,比如调整输入输出的阻抗、驱动强度和斜率等。同时,IOB可以通过与其他模块的连接实现不同的逻辑功能,如实现异步和同步的FIFO、计数器、状态机等。

19.请介绍一下协议相关的知识,主要就是时序图怎么看的?

解题思路: 协议相关的知识是 FPGA 工程师需要掌握的基本技能之一,通常包括以下几个方面:
协议概述:要了解协议的应用场景,主要特点以及协议的作用等等。
协议数据格式:要熟悉协议中的各种数据格式,如帧头、帧尾、数据域等等。
时序图:时序图是协议的重要表示方式,可以直观地表现出协议的时序关系。当读取时序图时,首先要了解协议的控制信号和数据信号,以及它们在时序图上的时序关系。
协议状态机:协议状态机可以用于表示协议的状态转换,也可以用于生成 Verilog HDL 代码。当了解协议状态机时,需要熟悉协议中各种状态的含义以及状态之间的转换条件。
关于如何阅读时序图,主要包括以下几个方面:
了解信号含义:首先要了解协议中各个信号的含义,以及它们在时序图上的位置。
分析时序关系:可以通过观察时序图上的箭头来了解信号之间的时序关系,例如哪个信号在哪个信号的前面或后面。
分析信号变化:可以通过观察时序图上的波形来了解信号的变化过程,例如在哪个时刻信号发生了变化,变化的方式是什么等等。
确定信号作用:最后可以通过分析时序图来确定各个信号的作用,以及信号之间的关系,从而更好地理解协议的工作原理。

20.FPGA和cpld的区别?

解题思路: FPGA和CPLD都是可编程逻辑器件,但它们的区别在于它们的体系结构和功能。FPGA是一种可编程逻辑器件,具有复杂的体系结构和多个功能块,可以实现高级的逻辑和数字信号处理功能。FPGA适用于需要处理大量逻辑和运算的应用程序,如图像和视频处理、高速通信、计算机视觉和信号处理等。
CPLD是一种较小的可编程逻辑器件,由于它的体积小,功耗低,成本较低,因此它适用于实现简单的逻辑功能和控制电路。CPLD通常用于控制电路、电源管理、时序控制、数据分配和数据选择等应用程序。
此外,FPGA和CPLD的编程方式也有所不同。CPLD通常使用低级语言进行编程,如VHDL或Verilog,而FPGA可以使用高级语言进行编程,如C或C++。

21.什么是阻塞赋值和非阻塞赋值

解题思路: 阻塞赋值和非阻塞赋值是Verilog HDL中两种不同的信号赋值方式。
阻塞赋值使用"=“符号进行赋值,表示在进行信号赋值时会等待该语句执行完毕才会执行下一条语句,类似于顺序执行。
非阻塞赋值使用”<="符号进行赋值,表示在进行信号赋值时不会等待该语句执行完毕,而是在该时钟周期结束后立即进行赋值,类似于并行执行。例如: always@(posedge clk) begin a <= b; //非阻塞赋值 c <= a; end 在这个例子中,a被赋值为b,在同一时钟周期内,c的值也被赋为a的值,而不会等待a的赋值语句执行完毕。因此,非阻塞赋值可以用于描述时序逻辑,同时避免了竞争条件的出现。

22.什么是建立时间和保持时间画图表示,哪个可能是零

解题思路: 建立时间(setup time)和保持时间(hold time)是数字电路中的时序约束。建立时间指的是输入信号在时钟信号到来之前必须保持稳定的最短时间,保持时间指的是输入信号在时钟信号到来之后必须维持稳定的最短时间。时钟上升沿和下降沿的时间差也称为时钟周期。
以建立时间为例,可以用一个时序图来表示。其中输入信号在时钟上升沿到来之前必须保持稳定的时间为建立时间,也就是从输入信号变化到时钟上升沿到来之间的时间。
setup time waveform
保持时间同理,只不过是在时钟上升沿到来之后输入信号必须维持稳定的时间。
hold time waveform
通常情况下,建立时间和保持时间都不可能为零。但是在某些情况下,建立时间可能会比时钟周期更短,这时就称为负建立时间(negative setup time)。

23.图像处理中滤波模板的大小会有什么样的影响

解题思路: 在图像处理中,滤波模板大小是一项重要参数,它会影响滤波器的性能和图像处理结果的质量。滤波模板是指在进行图像滤波时用到的一个二维矩阵,用来计算图像上每个像素周围的值。滤波模板的大小通常是奇数,如3×3、5×5等。当滤波模板大小变化时,会产生以下影响:
平滑度:滤波模板越大,平滑度越高,因为模板大小代表了计算邻域大小的范围。
保留细节:滤波模板越小,可以保留更多的细节信息,因为小的滤波模板只考虑了图像中局部像素的值。
处理速度:滤波模板越大,处理速度越慢,因为计算范围更广。
滤波效果:滤波模板的大小和形状也影响滤波器的性能和图像处理结果的质量。例如,对于边缘检测任务,常用的滤波模板为Sobel算子,它们的大小是3×3。
建议根据具体应用场景选择滤波模板的大小,优化滤波器的性能和处理结果的质量。

24.用两个与非门构成一个与门

解题思路: 可以使用以下电路图将两个与非门(NAND)构成一个与门(AND):

     _____

Input 1–|
| NAND |–Output
Input 2–|_____/
将两个与非门(NAND)级联起来,可以得到以下逻辑式:
Output = (Input 1 NAND Input 2) NAND (Input 1 NAND Input 2)
简化后,可以得到与门(AND)的逻辑式:
Output = Input 1 AND Input 2
因此,使用两个与非门(NAND)可以构成一个与门(AND)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44374477/article/details/136300160

智能推荐

Docker 快速上手学习入门教程_docker菜鸟教程-程序员宅基地

文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程

电脑技巧:Windows系统原版纯净软件必备的两个网站_msdn我告诉你-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你

vue2封装对话框el-dialog组件_<el-dialog 封装成组件 vue2-程序员宅基地

文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_

MFC 文本框换行_c++ mfc同一框内输入二行怎么换行-程序员宅基地

文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行

redis-desktop-manager无法连接redis-server的解决方法_redis-server doesn't support auth command or ismis-程序员宅基地

文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try

实验四 数据选择器及其应用-程序员宅基地

文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用

随便推点

灰色预测模型matlab_MATLAB实战|基于灰色预测河南省社会消费品零售总额预测-程序员宅基地

文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件

log4qt-程序员宅基地

文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt

100种思维模型之全局观思维模型-67_计算机中对于全局观的-程序员宅基地

文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的

线程间控制之CountDownLatch和CyclicBarrier使用介绍_countdownluach于cyclicbarrier的用法-程序员宅基地

文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法

自动化监控系统Prometheus&Grafana_-自动化监控系统prometheus&grafana实战-程序员宅基地

文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战

React 组件封装之 Search 搜索_react search-程序员宅基地

文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search