2890|2

367

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

FPGA初学者求助 Verilog 测试代码 [复制链接]

        各位老司机,小弟最近在学Verilog /FPGA。目前是跟着开发板卖家给来的教程敲代码来熟悉FPGA开发,可是最近想到编写好的Verilog模块还是要写一个测试平台来验证功能才算是懂开发。这几天在模仿教程里的串口例程。可是到了仿真验证阶段的时候却发现怎么搞都不对,串口接收的结果没有一次正确的。例程基本上是照抄的,应该是测试平台写的有问题。唉,实在是不怎么会写测试平台。教材上讲的测试平台都是极其简单的,例子又少。初学者真的一下子写不出串口接收的测试代码。现在是厚着脸皮把自己抄的例程和自己写的测试代码贴上来,希望大家指点指点。另外也将卖家配套的代码贴上来供大家参考。

首先,照抄的代码:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module UART_RX(
	input 	RX,			//  	UART的RX
	input 	clk_div,	//      时钟
	output 	rx_flag,    //		接收完成标志
	output 	dataerror,  //		数据错误标志
	output 	frameerror,	//      帧错误
	output 	[7:0]data
    );

reg[7:0]data;
reg[7:0]cnt;
reg rxbuf,rxfall,receive;
parameter paritymoed = 1'b0;
reg presult,idle;

always@(posedge clk_div)        // 下降沿信号
	begin
		rxbuf <= RX;
		rxfall <= rxbuf&(~RX);
	end


always@(posedge clk_div)
	begin
		if(rxfall && (~idle))
			begin
				receive <= 1'b1;
			end
		else if(cnt == 8'd168)
				receive <= 1'b0;
	end


always@(posedge clk_div)
	begin
		if(receive == 1'b1)
			begin
				case(cnt)
					8'd0:begin               //  起始位
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
					end
					8'd24:begin               //  bit 0
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[0] <= RX;
						presult <= paritymoed ^ RX;						
					end
					8'd40:begin               //  bit 1
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[1] <= RX;
						presult <= presult ^ RX;						
					end
					8'd56:begin               //  bit 2
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[2] <= RX;
						presult <= presult ^ RX;						
					end
					8'd72:begin               //  bit 3
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[3] <= RX;
						presult <= presult ^ RX;						
					end
					8'd88:begin               //  bit 4
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[4] <= RX;
						presult <= presult ^ RX;						
					end
					8'd104:begin               //  bit 5
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[5] <= RX;
						presult <= presult ^ RX;						
					end
					8'd120:begin               //  bit 6
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[6] <= RX;
						presult <= presult ^ RX;						
					end
					8'd136:begin               //  bit 7
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						rx_flag <= 1'b0;
						data[7] <= RX;
						presult <= presult ^ RX;						
					end
					8'd152:begin               //  bit 校验位
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						if(presult == RX)
							dataerror <= 1'b0;
						else
							dataerror <= 1'b1;
						rx_flag <= 1'b1;					
					end
					8'd168:begin               //  bit 停止位
						idle <= 1'b1;
						cnt <= cnt + 1'b1;
						if(1'b1 == RX)
							frameerror <= 1'b0;
						else
							frameerror <= 1'b1;
						rx_flag <= 1'b1;	 				
					end
					
					default:	cnt <= cnt + 8'b1;
				endcase
				
			end
		else
			begin
				cnt <= 8'b0;
				idle <= 1'b0;
				rx_flag <= 1'b0;
			end
	end

endmodule

 

然后是我自己写的测试 平台:

`include "UART_RX.v"

module RX_tb;

reg RX,clk_div;
wire rx_flag,dataerror,frameerror;
wire [7:0]data;



//	 例化
UART_RX RX_U1(
	.RX(RX),			//  	UART的RX
	.clk_div(clk_div),	//      时钟
	.rx_flag(rx_flag),    //		接收完成标志
	.dataerror(dataerror),  //		数据错误标志
	.frameerror(frameerror),	//      帧错误
	.data(data)
    );


initial
	begin
		RX = 1;
		clk_div = 1;
		
		#10 RX = 0;
		#22 RX = 1;

		
	end



always #1 clk_div = ~clk_div;


endmodule

最后,是卖家给的官方例程,只有例程,没给测试平台: 黑金Sparten6开发板AX309 Verilog教程V3.2.pdf (807.92 KB, 下载次数: 9)


 

此帖出自FPGA/CPLD论坛

最新回复

怎么不能下载     详情 回复 发表于 2019-6-26 14:52
点赞 关注
个人签名拿PADS和Allegro软件来吹牛的都是些土鳖
 

回复
举报

15

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

怎么不能下载

 

此帖出自FPGA/CPLD论坛
 
 

回复

367

帖子

0

TA的资源

一粒金砂(高级)

板凳
 

PDF吗?已经有人下载了啊。代码应该也可以复制的 

此帖出自FPGA/CPLD论坛
个人签名拿PADS和Allegro软件来吹牛的都是些土鳖
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表