Verilog RTL 代码实战
文章平均质量分 59
捌肆幺幺
FPGA 逻辑
展开
-
Verilog RTL 代码实战 09——纸上代码、心中电路
verilog代码及电路原创 2022-04-08 16:37:49 · 1079 阅读 · 0 评论 -
Verilog RTL 代码实战 08——串口通信处理DIY
目录1.通信处理的意义2.实现的功能3.功能实现分析1.通信处理的意义我们现在已经在06、07两篇文章中完成了单独的发送和接收命令,但是只是传输数据而已,那什么时候传送,什么时候结束这样的问题还没解决;因此这里通过对通信的处理来实现我们想要的自定应串口通信,下面一起来DIY我们自己设计的串口通信2.实现的功能①假设我们一次要获得8个数据,数据位宽为8,那么在一堆数据流中怎么才能区别有用无用信号呢?我们可以通过添加起始帧和结束帧;②当收8’h01时,表示开始传输;③当接收完8个数据后,传输结束;原创 2022-03-03 00:25:38 · 1053 阅读 · 2 评论 -
Verilog RTL 代码实战 07——RS232串口发送模块
目录1.时序2.分析3.verilog代码4.测试仿真1.时序发送模块的功能在于:对输入的一个多位数据,按照波特率规定的时间拆分成一位一位的数据发送①tx模块多了一个触发信号,也就是rx模块的rx_over作为tx模块的trig信号②同样是tx的第一个下降沿来之后,开始发送;发送完成后拉高,结束传输③传输的速率看波特率,根据波特率计算每个数据发送所需要的时间2.分析①同样使用两个计数器,分别计数一个bit的时间和bit的个数②使用一个寄存器存下输入进来的发送数据③标志flag_tx的有效原创 2022-02-26 16:06:44 · 1723 阅读 · 0 评论 -
Verilog RTL 代码实战 06——RS232串口接收模块
目录1.时序2.分析3.verilog代码4.测试仿真1.时序RS232串口是一位数据的输入,通过多次传输最好传达相应的数据。而接收模块的作用则是将一位一位的输入进行整合,得出输入的最终数据①当rx输入有第一个个下降沿,传输开始;数据传完给1拉高,结束本次传输②一共10个数据,第一个0构成下降沿,后面的8个位数据位,最后一位是停止位1③传输的速率看波特率,根据波特率计算每个数据发送所需要的时间2.分析①下降沿开始传输——那么我们就要做一个监沿器来识别下降沿,这里还要额外考虑一个问题,那就是r原创 2022-02-26 14:01:06 · 2463 阅读 · 0 评论 -
Verilog RTL 代码实战 05——监沿与PWM输出
目录1.监沿器2.PWM输出1.监沿器监沿器用来鉴定上升沿或下降沿具体实现:前一刻时钟与现时刻时钟比较信号经打一拍处理后存为前一刻信号,即比原信号慢了一个时钟的信号,因此可以根据两者的比较检测出上升沿或者下降沿。当现时刻为1,前时刻为0时,说明从上个时钟的0,变为这个时钟的1,判断出上升沿,同理可以判断出下降沿。具体代码如下:module identify_tool( input clk, input rst_n, input signal, output wire pose,原创 2022-02-24 19:55:05 · 1379 阅读 · 0 评论 -
Verilog RTL 代码实战 04——序列检测器的两种实现方法
目录0.序列检测器的作用1.用状态机实现序列检测器2.用移位寄存器实现序列检测器0.序列检测器的作用序列检测器:将一个指定的序列从数字码流中识别出来。下面设计一个序列检测器,将码流中的“10010”序列检测出来:①三个输入,clk,rst_n,x,其中x是一位的输入,由x传输的多个数据构成码流②输出z,在检测到完整的10010序列时,z拉高1.用状态机实现序列检测器这个在我的FPGA实例的第7个文章有介绍,包括代码和测试文件:链接:FPGA实例07——序列检测器设计及测试(使用状态机)2.用原创 2022-02-24 14:16:50 · 2041 阅读 · 0 评论 -
Verilog RTL 代码实战 03——奇偶分频
目录1.偶数分频2.奇数分频3.小数分频4.带占空比要求的分频1.偶数分频2.奇数分频3.小数分频4.带占空比要求的分频原创 2022-02-23 18:37:14 · 1840 阅读 · 2 评论 -
Verilog RTL 代码实战 02——多路选择器MUX
目录1.MUX应用2.二选一MUX3.四选一MUX1.MUX应用①多路选择器是常见的选通器件,主要用于通道的扩展、复用;②多路选择器又叫多路选择开关,可以根据需要选通某一路或者某几路从而达到通道扩展或者复用的目的;③常见的有二选一、四选一、八选一等;④符号(下图为二选一):2.二选一MUX二选一的MUX还是非常简单的,用一个三目运算符就搞定了: module MUX21 ( input a,b; input sel; output out ); assign o原创 2022-02-22 20:33:34 · 9554 阅读 · 3 评论 -
Verilog RTL 代码实战 01——半加器全加器
目录1.半加全加的区别2.一位半加器代码3.一位全加器代码4.多位的加法器1.半加全加的区别半加器没有进位输入——c_in,只有两个输入全加器有进位输入c_in,有三个输入2.一位半加器代码现在知道了半加器的功能,但是还不知道具体的逻辑表达式,因此还不能得出整个半加器的输入输出关系,下一步需要列出真值表,利用卡诺图得出逻辑表达式。因为变量不是很多,可以跳过卡诺图直接得出输入输出关系:c_out = a & b (与)sum = a ^ b (异或)所以代码如下: mo原创 2022-02-22 16:31:38 · 7151 阅读 · 0 评论