<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_46498597的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/m0_46498597</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; m0_46498597]]></copyright><item><title><![CDATA[[23]--＞变长SPI接口]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146770797</link><guid>https://blog.csdn.net/m0_46498597/article/details/146770797</guid><author>m0_46498597</author><pubDate>Wed, 02 Apr 2025 07:00:00 +0800</pubDate><description><![CDATA[然而，FPGA技术复杂，学习门槛较高，许多人（初学者或学生）在学习过程中面临诸多挑战。（1）模式0：SCK串行时钟线空闲是为低电平，数据在SCK时钟的上升沿被采样，数据在SCK时钟的下降沿切换，CPOL= 0，CPHA=0；（2）模式1：SCK串行时钟线空闲是为低电平，数据在SCK时钟的下降沿被采样，数据在SCK时钟的上升沿切换，CPOL= 0，CPHA=1；（3）模式3：SCK串行时钟线空闲是为高电平，数据在SCK时钟的上升沿被采样，数据在SCK时钟的下降沿切换，CPOL= 1，CPHA=1；]]></description><category></category></item><item><title><![CDATA[[22]--＞线性插值全遍历]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146770778</link><guid>https://blog.csdn.net/m0_46498597/article/details/146770778</guid><author>m0_46498597</author><pubDate>Tue, 01 Apr 2025 07:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，输入数据为5、10、15和20，输出数据线性差值y为10、20、22和25，符合设计预期。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。线性插值是针对一维数据的插值方法，它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计，它是根据到这两个点的距离来分配比重的。已知坐标（x0，y0）与（x1，y1），要得到[x0，x1]区间内某一位置x在直线上的值，线性插值公式如图1.2所示。]]></description><category></category></item><item><title><![CDATA[[21]--＞文件读写操作]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146770766</link><guid>https://blog.csdn.net/m0_46498597/article/details/146770766</guid><author>m0_46498597</author><pubDate>Mon, 31 Mar 2025 07:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，期望写入的数据为十六进制0x1~0xa，写入文件中的数据为十六进制0x1~0xa，实际写入数据与期望写入数据相等，符合设计预期。注意：对于字符a在文件中是以ASCII码形式表示，对于字符a对应的十六进制就是61，其他字符也是这样的显示原理，所以设计符合预期；为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。换行则需写成“%d\n”。4．读文件：利用$fread函数，将指定文件中的数据读取出来。]]></description><category></category></item><item><title><![CDATA[[20]--＞信号延时设计]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146436266</link><guid>https://blog.csdn.net/m0_46498597/article/details/146436266</guid><author>m0_46498597</author><pubDate>Wed, 26 Mar 2025 07:00:00 +0800</pubDate><description><![CDATA[注意：对于单bit信号来说，异步时钟域处理时，至少需要采集两次，所以这里对输入信号datain_en采集了2次。注意：对于单bit信号来说，异步时钟域处理时，至少需要采集两次，所以这里对输入信号datain_en采集了2次。用计数器来实现延时。3．信号延时0：利用250MHz时钟采集数据，250MHz时钟频率对应的周期是4ns，可以实现以4ns为步进的信号延迟功能；4．信号延时1：利用500MHz时钟采集数据，500MHz时钟频率对应的周期是2ns，可以实现以2ns为步进的信号延迟功能；]]></description><category></category></item><item><title><![CDATA[[19]--＞关键路径时序优化]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146436243</link><guid>https://blog.csdn.net/m0_46498597/article/details/146436243</guid><author>m0_46498597</author><pubDate>Tue, 25 Mar 2025 07:00:00 +0800</pubDate><description><![CDATA[注意：在数字逻辑设计中，建立时间（Setup Time）和保持时间（Hold Time）是两个重要的概念，它们直接影响着数据能否在特定的时钟沿传递到目的寄存器。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。（3）源时钟clk到达rega的时钟端口时，会有一定的延迟，从而形成Tclka；在FPGA设计中，为了确保数据能够正确地被时钟沿捕获，你需要根据目标器件的时序要求来设定合适的建立时间和保持时间。]]></description><category></category></item><item><title><![CDATA[[18]--＞双边沿电路设计]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146436214</link><guid>https://blog.csdn.net/m0_46498597/article/details/146436214</guid><author>m0_46498597</author><pubDate>Mon, 24 Mar 2025 07:00:00 +0800</pubDate><description><![CDATA[同时输出信号datain_edge产生了两个沿，一个是上升沿，一个是下将沿，符合设计预期。具体来说，可以通过比较当前信号状态与前一个时钟周期的信号状态，来判断是否发生了边沿变化。边沿检测常用于检测1bit信号的电平跳变，例如按键、微动开关等器件在正常工作时会产生由0到1或者由1到0的跳变，检测到边沿的跳变后就能知道这些器件在什么时候被触发，方便进行其它的逻辑判断。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。]]></description><category></category></item><item><title><![CDATA[[17]--＞时钟分频设计]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146291824</link><guid>https://blog.csdn.net/m0_46498597/article/details/146291824</guid><author>m0_46498597</author><pubDate>Wed, 19 Mar 2025 00:00:00 +0800</pubDate><description><![CDATA[Xilinx公司的原语按功能分为10类，包括计算组件、I/O端口组件、寄存器、时钟组件、处理器组件、移位寄存器、配置和检测组件、RAM/ROM组件、Slice/CLB组件以及吉比特收发器组件。原语是FPGA芯片中基本元件，代表FPGA中实际拥有的硬件逻辑单元，如LUT，D触发器，RAM等。原语在设计中可以直接例化使用，是最直接的代码输入方式，原语和HDL原语的关系，类似于汇编语言和C语言的关系。从仿真波形可以看出，输出时钟data_clk0是输入时钟sys_clk的二分频，符合设计预期。]]></description><category></category></item><item><title><![CDATA[[16]--＞时钟门控与时钟选择]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146291747</link><guid>https://blog.csdn.net/m0_46498597/article/details/146291747</guid><author>m0_46498597</author><pubDate>Tue, 18 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，时钟选择data_clk_sel为0时，输出时钟data_clk1选择输入时钟sys_clka；时钟选择data_clk_sel为1时，输出时钟data_clk1选择输入时钟sys_clkb，符合设计预期。从仿真波形可以看出，当输入时钟使能data_clk_ce为1时，输出时钟data_clk0与输入时钟sys_clk一样；时钟门控是一种通过在时钟路径上增加逻辑门对时钟进行控制的技术，当系统不需要动作时，可以关闭特定块的时钟，从而降低动态功耗。3．如果需要技术沟通，可以联系笔者。]]></description><category></category></item><item><title><![CDATA[[15]--＞时钟与数据对齐]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146291657</link><guid>https://blog.csdn.net/m0_46498597/article/details/146291657</guid><author>m0_46498597</author><pubDate>Mon, 17 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，对输入数据datain和datain_en进行数据采集，输出时钟data_clk0上升沿与输出数据dataout0和输出数据使能dataout_en0边沿对齐，符合设计预期。从仿真波形可以看出，对输入数据datain和datain_en进行数据采集，输出时钟data_clk1上升沿与输出数据dataout1和输出数据使能dataout_en1中心对齐，符合设计预期。在FPGA的源同步的系统设计中，发送端FPGA将时钟信号与数据一起发送，接收端FPGA使用接收到的时钟信号来采样数据。]]></description><category></category></item><item><title><![CDATA[[14]--＞递增和递减数据源]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146166342</link><guid>https://blog.csdn.net/m0_46498597/article/details/146166342</guid><author>m0_46498597</author><pubDate>Wed, 12 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[当输入使能data_en为1时，产生输出递增数据dataout0，数据范围为0~9，符合设计预期。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。然而，FPGA技术复杂，学习门槛较高，许多人（初学者或学生）在学习过程中面临诸多挑战。4．递减数据源：根据使能信号产生递减数据，使能信号为1，产生递减数据，从255开始递减计数。3．递增数据源：根据使能信号产生递减数据，使能信号为1，产生递增数据，从0开始递增计数；]]></description><category></category></item><item><title><![CDATA[[13]--＞随机和固定数据源]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146166232</link><guid>https://blog.csdn.net/m0_46498597/article/details/146166232</guid><author>m0_46498597</author><pubDate>Tue, 11 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[当输入使能data_en为1时，产生输出固定数据dataout1，数据为170，符合设计预期。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。然而，FPGA技术复杂，学习门槛较高，许多人（初学者或学生）在学习过程中面临诸多挑战。（ASIC）领域的一种半定制电路而出现的，既解决了定制电路的不足，又克服了原有可编程器件门电路数有限的缺点。3．随机数据源：根据使能信号产生随机数据，使能信号为1，产生随机数据；]]></description><category></category></item><item><title><![CDATA[[12]--＞数据打拍设计]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146140841</link><guid>https://blog.csdn.net/m0_46498597/article/details/146140841</guid><author>m0_46498597</author><pubDate>Mon, 10 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[例如，在FPGA设计中，如果有一个来自外部的快速变化信号，需要将其同步到FPGA的内部时钟域，可以通过在信号进入FPGA逻辑之前先“打一拍”或“打两拍”来实现。例如，我们可能想要将一个输入数据左移，并在移位后的空位上填充新的数据，然后将这个结果存储在一个寄存器中以便在下一个时钟周期使用。然而，FPGA技术复杂，学习门槛较高，许多人（初学者或学生）在学习过程中面临诸多挑战。“打一拍”指的是将某个信号延迟一个时钟周期，以此类推，“打两拍”就是延迟两个时钟周期，“打N拍”就是延迟N个时钟周期。]]></description><category></category></item><item><title><![CDATA[[11]--＞数据位宽匹配]]></title><link>https://blog.csdn.net/m0_46498597/article/details/146026795</link><guid>https://blog.csdn.net/m0_46498597/article/details/146026795</guid><author>m0_46498597</author><pubDate>Wed, 05 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，输入数据dataina为14，输出数据dataout0为6，输出数据dataout1为14，输出数据dataout2为14，符合设计预期。从仿真波形可以看出，输入数据dataina为7，输入数据datainb为2，乘法运算输出结果mult_out为14，符合设计预期。从仿真波形可以看出，输入数据dataina为7，输入数据datainb为2，加法运算输出结果sum_out为9，符合设计预期。在进行赋值时，必须确保源（右侧）和目标（左侧）的位宽匹配，以避免数据截断或扩展带来的意外行为。]]></description><category></category></item><item><title><![CDATA[[10]--＞巧用移位寄存器]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145972269</link><guid>https://blog.csdn.net/m0_46498597/article/details/145972269</guid><author>m0_46498597</author><pubDate>Tue, 04 Mar 2025 00:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，当输入数据datain连续输入10110时，移位序列检测器检测到该序列，输出sequence_detet脉冲，证明移位序列检测器满足设计预期。移位寄存器是指多个寄存器并排相连，前一个寄存器的输出作为下一个寄存器的输入，寄存器中存放的数据在每个时钟周期向左或向右移动一位。此外，可以让初学者少踩许多不必要的坑，并让初学者快速掌握FPGA设计精髓。（3）5位移位寄存器与5位检测序列5’b10110作比较，若结果相等，检测到特定序列5’b10110，否则，没有检测到序列5’b10110；]]></description><category></category></item><item><title><![CDATA[[09]--＞移位实现乘法与除法]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145972201</link><guid>https://blog.csdn.net/m0_46498597/article/details/145972201</guid><author>m0_46498597</author><pubDate>Mon, 03 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。从仿真波形可以看出，4 / 2 = 2，除法器满足设计预期。例如：a=2*8 = 2 << 3 = 16。例如：a=8/8 = 8 >> 3 = 1。例如：a=2*2 = 2 << 1 = 4；（2）a*4等价a << 2；例如：a=2*4 = 2 << 2 = 8；例如：a=8/2 = 8 >> 1 = 4；例如：a=8/4 = 8 >> 2 = 2；]]></description><category></category></item><item><title><![CDATA[[08]--＞模块参数化设计]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145806680</link><guid>https://blog.csdn.net/m0_46498597/article/details/145806680</guid><author>m0_46498597</author><pubDate>Wed, 26 Feb 2025 00:00:00 +0800</pubDate><description><![CDATA[从仿真波形可以看出，计数器0分别实现了2个不同位宽的计数器，code01_count0实现了0~3循环计数，code01_count1实现了0~15循环计数，满足设计预期。从仿真波形可以看出，计数器1分别实现了2个不同位宽的计数器，code02_count0实现了0~3循环计数，code02_count1实现了0~15循环计数，满足设计预期。4．计数器1：使用模块非参数化实现两个计数器，其中一个计数器位宽为2，另一个计数器位宽为4。注意：计数器位宽为2，代表计数器范围为0~3；]]></description><category></category></item><item><title><![CDATA[[07]--＞generate例化模块]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145806604</link><guid>https://blog.csdn.net/m0_46498597/article/details/145806604</guid><author>m0_46498597</author><pubDate>Tue, 25 Feb 2025 00:00:00 +0800</pubDate><description><![CDATA[为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。然而，FPGA技术复杂，学习门槛较高，许多人（初学者或学生）在学习过程中面临诸多挑战。此外，可以让初学者少踩许多不必要的坑，并让初学者快速掌握FPGA设计精髓。（ASIC）领域的一种半定制电路而出现的，既解决了定制电路的不足，又克服了原有可编程器件门电路数有限的缺点。3．如果需要技术沟通，可以联系笔者。注意：N可以随意设置，若N设置为2，就是将add模块例化2个；]]></description><category></category></item><item><title><![CDATA[[06]--＞for循环逻辑复制]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145806518</link><guid>https://blog.csdn.net/m0_46498597/article/details/145806518</guid><author>m0_46498597</author><pubDate>Mon, 24 Feb 2025 08:00:00 +0800</pubDate><description><![CDATA[为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。然而，FPGA技术复杂，学习门槛较高，许多人（初学者或学生）在学习过程中面临诸多挑战。（ASIC）领域的一种半定制电路而出现的，既解决了定制电路的不足，又克服了原有可编程器件门电路数有限的缺点。（1）初始化：设置循环变量的初始值，在使用之前，必须先定义一个integer的变量；（2）条件：循环执行判断条件，如果为真，for 循环将继续执行，否则跳出循环；]]></description><category></category></item><item><title><![CDATA[[05]--＞if-else与case(1)等价]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145658475</link><guid>https://blog.csdn.net/m0_46498597/article/details/145658475</guid><author>m0_46498597</author><pubDate>Wed, 19 Feb 2025 08:00:00 +0800</pubDate><description><![CDATA[case(1)类似于if-else语句，case item按照先后顺序具有优先级，如果只有一个item为1，则执行该item对应的表达式；从仿真波形可以看出，当d1~d7都满足条件时，只执行d1对应的表达式，编码器输出1；在Verilog语法中，常用的条件语句有if-else语句和case语句，用于判断条件是否为真，并执行判断条件后面的表达式。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。]]></description><category></category></item><item><title><![CDATA[[04]--＞寄存器初始化]]></title><link>https://blog.csdn.net/m0_46498597/article/details/145658383</link><guid>https://blog.csdn.net/m0_46498597/article/details/145658383</guid><author>m0_46498597</author><pubDate>Tue, 18 Feb 2025 08:00:00 +0800</pubDate><description><![CDATA[该方案包括6个模块，分别为时钟激励、复位激励、初始化0、初始化1、初始化2和初始化3。为了方便初学者快速掌握FPGA这门技术，作为FPGA从业者，我将多年的FPGA设计经验进行总结，并整理成FPGA课程起名为《FPGA进阶之路》。从仿真波形可以看出，寄存器初始化值为1，符合设计预期。从仿真波形可以看出，寄存器初始化值为2，符合设计预期。从仿真波形可以看出，寄存器初始化值为3，符合设计预期。从仿真波形可以看出，寄存器初始化值为4，符合设计预期。除了使用复位初始化，还可以使用参数进行寄存器初始化。]]></description><category></category></item></channel></rss>