完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
显示波形的代码如下:已经可以显示波形,求显示幅值大小的代码该怎么加?加在哪里? `timescale 1ns / 1psmodule lcd_driver( clk,rst_n, lcd_clk,lcd_de,lcd_r,lcd_g,lcd_b, lcd_en, lcd_rfdb,lcd_rfreq,lcd_rfclr, lcd_dhq,lcd_djreq, mcu_ledon, wave_rden,wave_datbus, wave_xs,wave_ys,wave_xe,wave_ye,wave_fcor,wave_bcor,wave_disp ); //系统信号 input clk; //液晶驱动时钟,通常和液晶说明书一致的频率 input rst_n; //低电平复位 //LCD接口 output lcd_clk; output lcd_de; //display data enable signal output[4:0] lcd_r; //display red data output[5:0] lcd_g; //display green data output[4:0] lcd_b; //display blue data //LCD背光控制接口 output lcd_en; //backlight enable //SDRAM数据流接口(显示层) input[15:0] lcd_rfdb; //输出到LCD模块待显示的SDRAM读出数据 output lcd_rfreq; //LCD模块发出的读FIFO请求信号,高电平有效 output lcd_rfclr; //LCD模块发出的读FIFO复位,低电平有效 //SDRAM数据流接口(叠加层) input[15:0] lcd_dhq; //输出到LCD模块待显示的叠加层SDRAM读出数据 output lcd_djreq; //LCD模块发出的叠加层读FIFO请求信号,高电平有效 //LCD背光控制 input mcu_ledon; //NIOS2控制背光:1--开背光,0--关背光 //LCD读波形坐标数据接口 output wave_rden; //双口RAM读使能信号 input[7:0] wave_datbus; //读当前波形高度数据 //wave产生控制寄存器 input[9:0] wave_xs,wave_ys; //波形显示起始位置 input[9:0] wave_xe,wave_ye; //波形显示结束位置 input[15:0] wave_fcor,wave_bcor; //波形显示前/背景色 input wave_disp; //波形显示使能信号,高电平有效 //----------------------------------------------------------- //VGA Timing 800*480 & 33MHz & 60Hz parameter VGA_HTT = 12'd1056-12'd1; //Hor Total Time parameter VGA_HST = 12'd0; //Hor Sync Time parameter VGA_HBP = 12'd46; //Hor Back Porch parameter VGA_HVT = 12'd800; //Hor Valid Time parameter VGA_HFP = 12'd210; //Hor Front Porch parameter VGA_VTT = 12'd525-12'd1; //Ver Total Time parameter VGA_VST = 12'd0; //Ver Sync Time parameter VGA_VBP = 12'd23; //Ver Back Porch parameter VGA_VVT = 12'd480; //Ver Valid Time parameter VGA_VFP = 12'd22; //Ver Front Porch parameter VGA_CORBER = 12'd100; //8等分做Color bar显示 //----------------------------------------------------------- //x and y counter reg[11:0] xcnt; reg[11:0] ycnt; always @(posedge clk or negedge rst_n) if(!rst_n) xcnt <= 12'd0; else if(xcnt >= VGA_HTT) xcnt <= 12'd0; else xcnt <= xcnt+1'b1; always @(posedge clk or negedge rst_n) if(!rst_n) ycnt <= 12'd0; else if(xcnt == VGA_HTT) begin if(ycnt >= VGA_VTT) ycnt <= 12'd0; else ycnt <= ycnt+1'b1; end else ; //----------------------------------------------------------- //vga valid signal generate reg vga_valid; wire yvalid = (ycnt >= (VGA_VST+VGA_VBP)) && (ycnt < (VGA_VST+VGA_VBP+VGA_VVT)); always @(posedge clk or negedge rst_n) if(!rst_n) vga_valid <= 1'b0; else if(yvalid &&(xcnt >= (VGA_HST+VGA_HBP)) && (xcnt < (VGA_HST+VGA_HBP+VGA_HVT))) vga_valid <= 1'b1; else vga_valid <= 1'b0; assign lcd_de = vga_valid; //----------------------------------------------------------- //SDRAM读控制信号产生逻辑 //LCD新的一屏指示信号,低电平有效,用于SDRAM读FIFO数据清空 assign lcd_rfclr = (ycnt == VGA_VTT); //SDRAM读显示数据请求信号产生 reg lcd_dbdjreqr; //提前2个时钟周期读数据。第0时钟读数据;第1时钟出数据,此时对读出数据做处理;第2时钟数据送显示 always @(posedge clk or negedge rst_n) if(!rst_n) lcd_dbdjreqr <= 1'b0; else if(yvalid && (xcnt >= (VGA_HST+VGA_HBP-4)) && (xcnt < (VGA_HST+VGA_HBP+VGA_HVT-4))) lcd_dbdjreqr <= 1'b1; else lcd_dbdjreqr <= 1'b0; assign lcd_djreq = lcd_dbdjreqr; //LCD模块发出的叠加层读FIFO请求信号,高电平有效(若当前显示模式控制寄存器为0,则只显示当前显示页。不产生叠加页读请求) reg lcd_dbrfreqr; always @(posedge clk or negedge rst_n) if(!rst_n) lcd_dbrfreqr <= 1'b0; else lcd_dbrfreqr <= lcd_dbdjreqr; assign lcd_rfreq = lcd_dbrfreqr; //LCD模块发出的读FIFO请求信号,高电平有效 //////////////////////////////////////////////////////////////////////////////// //波形界面产生控制逻辑 //////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------- //wire[11:0] x_dis = xcnt-(VGA_HST+VGA_HBP)-2; //wire[11:0] y_dis = ycnt-(VGA_VST+VGA_VBP)-2; //assign wave_rden = (x_dis >= {2'd0,wave_xs}) & (x_dis <= {2'd0,wave_xe}); //双口RAM读使能信号 reg wave_rden; //双口RAM读使能信号 always @(posedge clk or negedge rst_n) if(!rst_n) wave_rden <= 1'b0; else if((xcnt >= {2'd0,wave_xs}+(VGA_HST+VGA_HBP-5)) && (xcnt < {2'd0,wave_xe}+(VGA_HST+VGA_HBP-5))) wave_rden <= 1'b1; else wave_rden <= 1'b0; //波形有效显示区域标志位 //wire wave_dis = wave_disp & (y_dis >= {2'd0,wave_ys}) & (y_dis <= {2'd0,wave_ye}) & (x_dis >= {2'd0,wave_xs}) & (x_dis <= {2'd0,wave_xe}); reg wave_dis; //波形有效显示区域标志位 always @(posedge clk or negedge rst_n) if(!rst_n) wave_dis <= 1'b0; else if((ycnt >= (VGA_VST+VGA_VBP+{2'd0,wave_ys})) && (ycnt < (VGA_VST+VGA_VBP+{2'd0,wave_ye})) && (xcnt >= {2'd0,wave_xs}+(VGA_HST+VGA_HBP-2)) && (xcnt < {2'd0,wave_xe}+(VGA_HST+VGA_HBP-2))) wave_dis <= 1'b1; else wave_dis <= 1'b0; //////////////////////////////////////////////////////////////////////////////// //液晶显示数据控制逻辑 //////////////////////////////////////////////////////////////////////////////// //---------------------------------------------------------------------- //显示数据处理输出 reg[15:0] lcd_dhqr; reg[7:0] wave_datbusr; //波形值缓存一拍,用于连线 always @(posedge clk) begin wave_datbusr <= wave_datbus; end //叠加层和波形处理 always @(posedge clk or negedge rst_n) if(!rst_n) lcd_dhqr <= 16'd0; else if(wave_dis) begin //波形显示区域 if((wave_datbusr == 8'd0) || (wave_datbus == 8'd0)) begin //X轴第1个点和最后1个点显示单点 //if(y_dis == (wave_ye-(wave_datbus-1'b1))) lcd_dhqr <= wave_fcor; //前景色 if(ycnt == (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbus-1'b1))) lcd_dhqr <= wave_fcor; //前景色 else lcd_dhqr <= wave_bcor; //背景色 end else begin //X轴第1个点和最后1个点之间的显示连续的连线效果 if(wave_datbusr > wave_datbus) begin //if((y_dis >= (wave_ye-(wave_datbusr-1'b1))) && (y_dis <= (wave_ye-(wave_datbus-1'b1)))) lcd_dhqr <= wave_fcor; //前景色 if((ycnt >= (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbusr-1'b1))) && (ycnt <= (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbus-1'b1)))) lcd_dhqr <= wave_fcor; //前景色 else lcd_dhqr <= wave_bcor; //背景色 end else begin //if((y_dis >= (wave_ye-(wave_datbus-1'b1))) && (y_dis <= (wave_ye-(wave_datbusr-1'b1)))) lcd_dhqr <= wave_fcor; //前景色 if((ycnt >= (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbus-1'b1))) && (ycnt <= (VGA_VST+VGA_VBP)+({2'd0,wave_ye}-(wave_datbusr-1'b1)))) lcd_dhqr <= wave_fcor; //前景色 else lcd_dhqr <= wave_bcor; //背景色 end end end else lcd_dhqr <= lcd_dhq; //----------------------------------------------------------- //显示数据处理输出 reg[15:0] lcd_mudb; always @(posedge clk or negedge rst_n) if(!rst_n) lcd_mudb <= 16'd0; else if(lcd_dhqr == 16'h0000) lcd_mudb <= lcd_rfdb; //若叠加页数据为0x0000时,当前像素点为显示页数据 else lcd_mudb <= lcd_dhqr; //否则为叠加显示页数据 assign lcd_r = vga_valid lcd_mudb[15:11]:5'd0; assign lcd_g = vga_valid lcd_mudb[10:5]:6'd0; assign lcd_b = vga_valid lcd_mudb[4:0]:5'd0; //----------------------------------------------------------- //液晶背光和时钟控制逻辑 assign lcd_en = mcu_ledon; assign lcd_clk = ~clk; endmodule |
|
相关推荐
11个回答
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fpga 很有前景的 ,工资也不错 西安好点的能上8k 这只是研究生毕业去的第一年。 |
|
|
|
研究生?本科生是不是不好找工作啊 |
|
|
|
|
|
|
|
不是来解决问题的吗?怎么聊那个了啊主题完全变了 啊
|
|
|
|
爱莫能助。。。。。。。。。。。我也在学习这方面,现在能力有限。
|
|
|
|
最近正好遇到类似的问题,卡了好几天,一咬牙,不做了!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1472 浏览 1 评论
助力AIoT应用:在米尔FPGA开发板上实现Tiny YOLO V4
1067 浏览 0 评论
2556 浏览 1 评论
2245 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
2515 浏览 0 评论
1962 浏览 54 评论
6032 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 01:35 , Processed in 1.118830 second(s), Total 91, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号