社区导航

 

搜索
查看: 318|回复: 2

[求助] FPGA初学者求助 Verilog 测试代码

[复制链接]

401

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-6-24 23:22 | 显示全部楼层 |阅读模式

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

首先,照抄的代码:

`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, 下载次数: 2)

拿PADS和Allegro软件来吹牛的都是些土鳖


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2019-6-26 14:52 | 显示全部楼层

怎么不能下载

 



回复

使用道具 举报

401

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2019-6-26 16:19 | 显示全部楼层

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

拿PADS和Allegro软件来吹牛的都是些土鳖


回复

使用道具 举报

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

关闭

站长推荐上一条 /1 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-7-18 21:08 , Processed in 0.131352 second(s), 20 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表