
VERILOG
文章平均质量分 55
mcupro
这个作者很懒,什么都没留下…
展开
-
使用在线路线逻辑分析仪ILA调试模块的小技巧
在优快云这个BLOG中我详细给出了如何在VIVADO中插入在线逻辑分析仪进行信号获取。这里再记录一下自己用的一个小技巧:实例化一个统一的多款口大位宽的ILA,在多处使用。我们在一个模块内插入ILA要测试的端口数和位宽都不一样,根据每个需求做生成一个ILA显然工作量有点大,也生成了那么多ILA只用一次调试完就丢弃的化,项目文件也就比较乱了。我们可以先实例化一个多个端口,比方说16个端口,在模块中最大的寄存器是64BIT,我们就实例化一个16个端口,每个端口都是64位的ILA,如下图实际使用时候.原创 2022-05-08 13:26:59 · 1143 阅读 · 0 评论 -
GIT上手实践笔记之3 使用子模块
上个笔记记录了如何上传文件和文件夹。这里我们试验一下如何使用子模块。我们使用别人的代码可以将别人的整个GITHUB上的某一个项目做为一个自己的代码一部分,GIT里面称作子模块submodule。这篇就简单试验一下调用子模块并指定是使用的历史版本。git clone https://github.com/hexsdr/gittest2cd gittest2/git submodule add https://github.com/hexsdr/gittestcd gittest/git log原创 2022-04-29 05:32:55 · 718 阅读 · 0 评论 -
GIT上手实践笔记之2 基本的文件上传
上一篇BLOG主要设置KEY并获取了TOKEN。其中KEY是我们GIT客户端生成的拷贝到GITHUB页面上,而KOTEN是相当于一组授权码,是GITHUB生成的,拷贝下来保存待对远程库进行操作时候使用。首先在git的命令行输入 h...原创 2022-04-27 22:52:50 · 262 阅读 · 0 评论 -
使用icarous+gtkwave联合quartus进行verilog项目调试
由于现在代码比较多了,我们使用一个集中可视化的开发环境进行管理代码。这里我选择了QUARTUS。我们仿真依然使用icarvas verilog简称iverilog,查看波形依然使用gtkwave。在iverilog编译中发现什么错误会报出具体文件和具体行号,我们直接使用quartus根据视窗的模块(如上图)层次显示直接打开对应的代码。大家可以使用两个屏幕,一个屏幕显示代码,另外一个屏幕显示波形。这样happy地debug。...原创 2021-12-09 06:14:02 · 518 阅读 · 0 评论 -
仿真通过的UDP和IP发送打包
module udp_tx_pack_tb ;reg rst = 0 ,clk = 0 ;always #5 clk = ~clk ;initial begin $dumpfile("test_udp_tx_pack.vd");$dumpvars;rst = 1;@(posedge clk) ;@(posedge clk) ;rst = 0; @(posedge clk) ;end wire [31:0]src_ip ={8'd192,8'd168,8'd2,8'd4...原创 2021-12-04 12:45:38 · 706 阅读 · 0 评论 -
一个FM发送信号的简单例子
// CW SOS FM Transmitter based on http://hamsterworks.co.nz/mediawiki/index.php/FM_SOSmodule top(input clk, output clkin, modout, lock); wire clkout;// PLL running at 255 MHz (near max 27...原创 2020-04-15 12:29:18 · 931 阅读 · 0 评论 -
例说verilog中的generate
贴出我项目代码中一部分的generate代码,跟大家分享一下这种表达方式,期待大家领略其精神实质。 genvar i; generate for(i=0;i<32;i=i+1) begin:down_wreq_gen always @(posedge up_clk )down_wreq[i]<=(up_waddr[13:9]=...原创 2020-03-10 00:12:15 · 593 阅读 · 0 评论 -
一个易用的AXI_LITE转接模块 [视频提纲]
我们在做AXI_LITE外设时候,需要在大量的例子代码里面加入自己的寄存器和逻辑。不但麻烦而且很容易出错。这里给大家推荐一个转接口的模块,将AXI接口转换成非常简单的pcore寄存器读写操作。 up_axi #(.AXI_ADDRESS_WIDTH (C_S00_AXI_ADDR_WIDTH) ) i_up_axi ( .up_rstn ( s00_ax...原创 2020-03-06 21:54:32 · 1513 阅读 · 0 评论 -
做一个2ASK试验 之一
2ASK调试模式比较简单,就是用有信号和没有信号来表示0,1。现在问题就是如何从基带层面判断一个信号是有还是没有。当然是通过幅度。我们做一个模块算出波谷的绝对值,和波峰相加就得到了幅度。之后设置两个阈值,大于这个阈值1就认为是数值1,小于阈值0就认为是数值0,而在0,1之间的就保持之前的数值状态。module amp_cal(input clk ,input [11:0] adc_va...原创 2020-03-03 01:34:03 · 629 阅读 · 0 评论 -
做一个FSK的收发试验 之五
其实一个项目最重要的是在规划和实现,在规划和实现上多动脑子,多花时间,后续调试会很顺利。现在进行最终的调试了。从效果上进行检查就是在bb_bit_in输入,之后在bb_bit_out输出,看输入输出是否对应。作为比较简单的测试我们可以在bb_bit_in接入一个计数器,每秒变化一次,之后在bb_bit_out接一个led,看LED是否正常闪烁。我做过这步成功后,我使用了一个PMOD...原创 2020-02-26 20:40:50 · 557 阅读 · 0 评论 -
做一个FSK的收发试验 之四
写这个BLOG时已经已经自发自收取得了成功。这个BLOG属于简单回顾。我们这个FSK的基本思路就是传递数据0时候一个频率,传递1时候是另外一个频率。我们通过DDS合成不同的频率,而通过过零检测实现对接收到基带频率统计周期的计算,从而判断是在那个频率点上,以解调出来0或者1。我们这里做一个接口,查看一下在不同的频率设置点上,收到的信号周期都是多少。这个c...原创 2020-02-26 19:48:45 · 597 阅读 · 0 评论 -
做一个FSK的收发试验 之二
有了上述的代码我们尝试攒在一起,进行仿真一下。这里直接将接受和发送都放在一起进行测试。写代码如下: module tb ;reg clk=;always #5 clk = !clk ; reg bit_in;wire bit_out;wire [11:0]sin,cos ; reg [15:0]c ;always@(posedge clk )c <= (c==...原创 2020-02-25 02:41:20 · 678 阅读 · 0 评论 -
做一个FSK的收发试验 之一
这里使用我们之前写好的简易的DDS模块。我们先回顾一下用到的这个my_dds模块。/*my_dds my_dds(.clk( ) ,.rst( ) ,.clr ( ) ,.cnt( ) ,.step( ) ,.sin( ) ,.cos( ) ,); */module my_dds(input clk ,rst,clr ,input [15:0] cnt,...原创 2020-02-25 02:29:58 · 776 阅读 · 2 评论 -
Verilog描述的简单的异步RAM
module simple_dc_ram#( parameter dw = 64,aw=7) ( input rd_clk,wr_clk,wr, input [aw-1:0]wr_addr,rd_addr, output reg [dw-1:0]q , input [dw-1:0]d ); reg [dw-1:...原创 2020-02-09 20:35:17 · 801 阅读 · 0 评论 -
异步FIFO代码
/* dc_fifo_gray #( parameter dw = 64,aw=7) ( .rd_clk( ), .wr_clk( ), .rd_rst_n( ), .wr_rst_n( ), .we( ), .re( ), .din( ) , .dout ( ) , .full( ) , ....原创 2020-01-14 18:54:19 · 569 阅读 · 0 评论 -
降低频率为以前的1000之一的代码
odule clk_div_1000(input clk_i,output reg clk_o);reg [9:0] c ;always @ (posedge clk_i) if ( c >= 499 ) c<=0;else c<=c+1;always @ (posedge clk_i) if (c==499) clk_o<= ~clk_o;...原创 2019-10-24 11:19:12 · 217 阅读 · 0 评论 -
状态机实现对I2C器件的写操作
1,状态机实现。2,不检测ACK,但满足ACK的时序。3,使用24C02测试通过。4,继续补充。5,怎么能在这里面输入代码格式?module wr_a_byte_to_24c02( input clk,rst, input [6:0] dev_addr, input [7:0] dat, input原创 2014-02-25 12:36:21 · 2827 阅读 · 1 评论 -
移植OPENCORES上的I2C MASTER到AXI接口处理器层面实现驱动 之2
IP核已经写好,可以通过AXI_LITE总线连接到PS上,接下来就写C语言驱动。其实硬件底层的I2C驱动很简单,就是以下这四个函数。void I2C_init(unsigned int base,unsigned int clk,unsigned int speed);int I2C_start(unsigned int base, unsigned int add, uns原创 2017-07-04 13:02:13 · 1053 阅读 · 0 评论 -
宽度和长度都可配置的REG
module wb_io( input clk, input[1:0] d, output [1:0]q ); regs #(2,4)regs(.clk(clk),.d(d),.q(q)); endmodule module regs#(parameter DATA_WIDTH=1,原创 2013-08-11 15:28:30 · 1006 阅读 · 0 评论 -
经典的单时钟FIFO
经典的,可配置的单时钟FIFO实现 已经经历过流片验证。module sc_fifo#( parameter AW = 5 , parameter DW = 64 )( input clk,rst_n, input [ DW-1:0] din, input wr,rd...原创 2018-12-01 00:39:40 · 662 阅读 · 0 评论 -
一个简单的同步采样的频率计数器
风扇转速线反馈回来的最高频率是180HZ,我随手简单写一个频率计数器。因为采集的频率很低,所以采用简单的同步采样方式,而没有使用跨域时钟域的异步计数器方式。代码如下,每秒产生一个update 信号,这信号更新采集计数器c到result寄存器,之后清0采集计数器c。这里输出是32位是编码习惯,调用时候可以根据实际情况忽略高位。module frq_cal # (parameter frq...原创 2018-12-01 00:41:49 · 648 阅读 · 0 评论 -
简洁的PWM控制器
直接在value里面输入1-98就可以改变占空比,实现PWM调制。改变PRE_DIV参数,可以根据不同clk设置不同的PWM频率。再次分享。 module pwm_ctlr#(parameter pre_div=1000)(input clk,input [6:0] value,output reg pwm);reg [20:0] delay_cntr ;al...原创 2018-12-01 00:43:29 · 2054 阅读 · 0 评论 -
只有一个元素的异步FIFO
module one_entry_fifo #(parameter dw=16 )( input rd_clk, wr_clk, rd_rst_n,wr_rst_n,we,re, input [dw-1:0] d ,reset_value, output reg [dw-1:0] q , output reg empty...原创 2018-12-01 00:44:35 · 199 阅读 · 0 评论 -
一种FSM编码套路和RTL图的分析对话
不跨时钟域一般不用考虑fsm编码格式。FPGA综合器一般会转成热独码。 这都可以哈 不用纠结 能让综合器 编译器做的事情 自己写代码时候就不需要费心 这个状态机 和标志位 是一个意思吗?mcupro 2018-12-24 14:56:11基本一个意思吧 都是个记号记录当...原创 2018-12-24 15:32:31 · 429 阅读 · 0 评论 -
关于HP,HR端口以及工艺和电压的对话
小飞侠各位问一个问题,IObank的类型有HPHRHD三种,一般在哪里可以查到器件的bank类型,今天拿到一个kc705,只能根据经验大致猜一下bank323334是hp,因为不支持3.3v和2.5v。但是总觉得有点没谱。有没有大神能解释一下?ota862019/5/8星期三下午11:19:03作者写书的时候,后续小节的代码没剔除干净,读者自己写的逻辑里没有访存相关时...原创 2019-05-08 23:30:39 · 2327 阅读 · 0 评论 -
verilog写的一个简洁实用的PWM模块
直接在value里面输入1-98就可以改变占空比,实现PWM调制。改变PRE_DIV参数,可以根据不同clk设置不同的PWM频率。 在此分享。 module pwm_ctlr#(parameter pre_div=1000)( input clk, input [6:0] value, output reg pwm ); r...原创 2019-07-05 14:24:36 · 3089 阅读 · 0 评论 -
一个看门狗模块
module wdg (input clk ,input feed ,output reg do_rst);parameter of_bit = 31 ;reg feedr;always @(posedge clk) feedr<=feed;wire is_feed = feedr != feed ;reg [of_bit:0]...原创 2019-07-05 14:31:38 · 2935 阅读 · 0 评论 -
关于ZEDBOARD上PROG按键以及ZYNQ中PROG脚的作用的分析
人在草木中2019-07-06下午1:33:03李工,启动Linux的问题解决了,我再问个问题,视频3,PL端下载进比特流文件后,FPGA跑起来了,按一下板子上BTN6,就是写了个PROG的那个按钮,程序就不跑了,这是为啥?那个按钮是PL端的复位按钮吗人在草木中2019-07-06下午1:33:34按完复位FPGA应该也会从头跑啊mcupro2019-07-06下午...原创 2019-07-06 17:49:22 · 2576 阅读 · 0 评论 -
一个双向IO的模块
调用IOPAD的资源,应该放在TOP层module ad_iobuf ( dio_t, dio_i, dio_o, dio_p); parameter DATA_WIDTH = 1; input [(DATA_WIDTH-1):0] dio_t; input [(DATA_WIDTH-1):0] dio_i; output [(...原创 2019-07-18 14:35:40 · 881 阅读 · 0 评论 -
Zedboard + AD9361底层接口的分析 之三 AXI_AD9361模块的分析
这个AXI_AD9361模块跟上述分析仪的PACK和UNPACK模块相比,除了连接片内其他模块之外还连接AD9361芯片。应该说是AD9361跟内部其他模块的接口。我们来看看都链接那些9361芯片的引脚:上图中黄色线是链接9361模块的,我们再放大看看:在模块左边的脚是输入接收AD9361芯片的输出。右边的脚是输出给AD9361芯片。各自分析一下这些脚:...原创 2019-08-20 11:34:53 · 4610 阅读 · 0 评论 -
ZYNQ系统中实现FAT32文件系统的SD卡读写之四 经验总结
在上述的三篇BLOG里面主要介绍了步骤和设置,这里简答罗列一下此软件硬件环境中进行FAT32读写的经验总结。1,SD卡要格式成FAT32格式。否则写大文件失败,上几M的就写不了了。2,每次建议写256的整数倍字节,否则余数部分就会不能写入,比如f_write函数写参数长度为511字节,实际是写了256字节,写参数是512,513则实际写了长度是512字节。这应该是一个BUG原创 2017-06-24 19:48:17 · 5997 阅读 · 5 评论 -
ZYNQ系统中实现FAT32文件系统的SD卡读写 之二 VIVADO配置
接下来就是设置VIVADO,可以在ZEDBOARD默认的VIVADO设置上去掉SD0,使能SD1,并设置WP脚和CD,对应关系看上一片BLOG所介绍。这里注意MIO0-15是在BANK0上,其BANK电压ZEDBOARD板子设置为3.3V,所以可以直接接SD卡,而SD0的MIO接口是在BANK1上,其BANK电压是1.8V。所以要经过电平转换芯片接3.3V的SD原创 2017-06-24 19:07:21 · 4347 阅读 · 0 评论 -
ZEDBOARD 视频扩展板子上实现HDMI,代码
1,www.fpga4fun.com是一个非常好的站,深入浅出讲解。此代码主要部分来源于其HDMI部分的代码。2.,使用SYSCLK.TAOBAO.COM购买的兼容ZEDBOARD板子以及视频输出扩展板。3,实现了640X480 分辨率输出:4,需要两个时钟,一个是像素点时钟PIXCEL—CLK ,另外一个是10倍于PIXCEL_CLK的HDMI数据输出时钟。当640X原创 2016-10-13 16:07:07 · 4539 阅读 · 4 评论 -
AXI STREAM ,AXIS总线的理解
全兼容ZEDBOARD 开发板子 SYSCLK.TAOBAO.COM 1,VALID和READY 是所有AXI总线必须有的,VALID是MASTER告诉SLAVE数据已经展现在了总线上了,你可以取走了,而READY则是SLAVE段回复总线,数据已经取走。你可以更新数据了。注意MASTER 只有在设置VLAID之后才检测READY。所有AXI总线都是这个规则,AXIS(AXI ST原创 2016-10-12 12:41:33 · 16296 阅读 · 1 评论 -
VGA的参数配置文件
`timescale 1ns / 1ns//`define VGA_640x480_60HZ_25MHz`define VGA_800x600_60HZ_40MHz//'define VGA_1024x768_60HZ_65MHz//`define VGA_1440x900_60HZ_106_5MHz//`define VGA_1280x1024_60HZ_108MHz//`defi原创 2016-10-06 12:51:42 · 2633 阅读 · 0 评论 -
上升边缘和下降边缘检测的代码
1,不说边缘检测是为了区别图像处理学中的术语。2,module edge_det (input clk,sig,output reg pos_res,neg_res,);reg [2:0] sigr ;always @ (posedge clk )sigr[2:0]always @ (posedge clk )pos_res always @原创 2016-09-09 10:45:12 · 1036 阅读 · 0 评论 -
【ZedBoard实验随笔】OV7670 摄像头 简单总结
1,OV7670 有一大堆寄存器需要配置,这些配置可以参考别人已经做好的代码。2,OV7670 设置为640*480 16的分辨率,30帧每秒,就是30FPS,每一个RGB的数据是16位的,这16位的数据分成两次从8BIT的总线传输过来。3,计算时钟是多少: 640*480个点,每秒传递30帧(也就是刷屏30次每秒),这样就是640*480*30,而每个点是16位的需要在0OV7670位的...原创 2016-09-08 13:19:35 · 19101 阅读 · 2 评论 -
还没有调试,但是认为比较靠谱的I2C读写例子
很好的I2C 驱动 IO模拟转载 2014-04-28 18:38:10 · 2397 阅读 · 0 评论 -
检测LWLA逻辑分析仪的外部时钟同步
LWLA1034 和LWLA2034 支持外部同步时钟,并且支持时钟采集边缘的选择.用下面的文字和图片记录我检测此功能的过程. 这是硬件连接,我用另外一台逻辑分析仪,充当检测信号发生器. 我们这次检测的目的是看在设置外部时钟上升(下降)边缘采集的时候,是否正确采集到数据,并且确定是在上升(或者下降)边沿进行了触发.因此在构造检测波形的时候我们将考虑到这两个边缘,在一个检原创 2012-06-18 12:35:36 · 1645 阅读 · 0 评论 -
旁若无人 写一些东西 整理一下思路
1,很难得在SIGOK项目里面看到有自己优快云博客的连接。2,今天写点东西整理一下自己的思路。3,别人看了也许没有意义,或许没有太多必要看下去。4,今天搞定了4字的并行触发处理,但是现在只能精确到四字所在块,而不能确定是哪个字,这点需要继续改建,但是不是很关键的问题,可以一放。5,可以避繁就简,做一个电平和边缘都是一次触发的版本。很高级的事件触发,很少有人用到。6,同样的茶叶原创 2014-02-03 00:32:10 · 1046 阅读 · 0 评论