您的位置 首页 基础

小梅哥和你一同深化学习FPGA之串口调试(一)(下)

以上为小梅哥为了对特权同学的串口收发模块进行测试所展开的部分工作,到这里,仿真测试所需要的准备工作我们就做好了,接下来将实际进行仿真,通过仿真来分析该模块的性能。这里极力推荐大家使用model

  以上为小梅哥为了对特权同学的串口收发模块进行测验所翻开的部分作业,到这儿,仿真测验所需求的准备作业咱们就做好了,接下来将实践进行仿真,经过仿真来剖析该模块的功用。

  这儿极力引荐咱们运用modelsim进行仿真,由于quartusII自带的仿真东西灵活性和功用都赶modelsim相差甚远。Modelsim作为一款强壮的仿真软件,在业界被广泛运用。一起,modelsim针对不同的EDA厂家,也推出了OEM版别,modelsim-altera便是为Altera公司开发的OEM版别,此版别针对Altera公司的器材预先做了许多的作业,使咱们运用的时分能够愈加的便利便利,这儿,小梅哥就运用modelsim-Altera版别来仿真这个规划。

  咱们能够运用modelsim-Altera,经过彻底手动化的方法来树立仿真工程,增加仿真库、编译文件,增加波形,运转仿真,当然也能够运用Nativelink的方法,经过quartus II软件完成一键调用,完成主动化的仿真进程。这儿,关于初学者,小梅哥仍是引荐选用这种主动化的方法,由于简略,不需求过多的手动操作,且不简单犯错。这儿,小梅哥也运用这种方法来进行仿真。

  要运用这种方法仿真,咱们需求在QuartusII软件中进行EDA Tools的设置。在quartus II软件中,顺次点击“tools – options ”,在翻开的选项卡中挑选“EDA tool options”,在modelsim-altera一栏中输入你的modelsim-Altera的装置途径(部分在装置的时分就现已主动设置好了,就不用去管),如下图所示:

    

 

  这儿设置完成后,点击OK即可。

  当承认这一步没有问题后,咱们就能够开端进行Nativelink的设置了。Nativelive便是一个链接的进程,经过设置Nativelink,让Quartus II软件能够主动的调用modelsim-altera软件,并树立仿真工程,增加仿真库、编译文件,增加波形,运转仿真。接下来咱们就来进行Nativelink的设置

  第一步:顺次点击“assignments– settings”,

    

 

  在弹出的选项卡中,选中“EDA Tool Settings”(赤色标号1处),在子选项中挑选“Simulation”(赤色标号2处),留意赤色标号5处和6处应别离挑选为modelsim-altera和Verilog HDL,假如不是,请经过下拉列表挑选为上述选项。点击“Compile test bench” (赤色标号3处),然后点击最右侧的“Test Benchs” (赤色标号4处),就会弹出如下所示的界面:

    

 

  点击“New” (赤色标号1处),接着会弹出“New Test Bench Settings”界面,如下图所示:

    

 

  首要咱们点击赤色标号1处的三个小点,在弹出的文件挑选界面中,选中咱们需求参加的testbench文件,如下所示:

    

 

  这儿咱们挑选“Uart_tb.v”和“Uart_module.v”,点击“Open”翻开。这儿,“Uart_tb.v”为仿真顶层文件,“Uart_module.v”为串口仿真模型。

  文件挑选好之后,回到New Test Bench Settings界面,如下图所示,

    

 

  在顶端“test bench name”(赤色标号2)处输入咱们的仿真顶层文件名,即Uart_tb,留意,不要加“.v”后缀。所以,”Top level module in test bench”会主动与“Test bench name”保持一致。

  至此,咱们的Nativelink设置就完成了,一路挑选OK下去,直到回到Quartus II软件的主界面。此刻,咱们现已完成了仿真需求的一切设置,咱们直接点击Quartus II软件上的RTL Simulation图标

    

 

  即可发动仿真,也能够经过“Tools– Run Simulation Tool – RTL Simulation”发动仿真。

  接下来,咱们需求做的便是大约20秒左右的等候,这个进程中,Quartus II会主动发动modelsim-altera软件,树立仿真工程,增加仿真库、编译文件,增加波形,运转仿真。最终停留在如下所示的状况:

    

 

  这儿,右侧深色窗口为波形窗口,下方为副本界面,打印了软件运转进程中的信息,包括增加文件、编译文件、增加波形、运转等,一起还打印了testbench中需求打印输出的信息。详细的打印信息如下:

    

 

  由此打印信息可知,串口仿真模型一共进行了8次数据发送,却只收到了6次数据,因而有两次发送给串口模块的数据丢掉或许串口模块发送的数据不正确。一起,第一次发送出去的数据接纳回来仍是正确的,可是第2次发送的数据再接纳回来,就过错了。这两次数据发送之间的时刻距离为40ns。考虑或许是发送距离太短导致,可是当第4次发送的数据(s4)被正确接纳后(r3),紧接着第5次发送的数据在发回的时分,再次犯错,而s4和s5之间距离了300ns,因而可知,该串口收发模块在接连两次发送距离很短的情况下,很简单犯错。那么,怎么样才干确保接连两次发送之间,即便很短的距离,也不犯过错呢?小梅哥经过对仿真波形的剖析发现:一次接纳数据,一共有12个波特率脉冲,如下图所示:

    

 

  这儿小梅哥就有点疑问了,咱们一般的使用中,串口一帧的数据为十位,包括1位开始位、8位数据位、一位中止位,一般不含校验位。因而,这儿显着多了两个波特率周期,那么,问题很有或许就出在这儿。回到这部分的代码:

  43 always @ ( posedge clk or negedge rst_n )

  44 if(! rst_n ) begin

  45 bps_start_r <= 1’bz ;

  46 rx_int <= 1’b0 ;

  47 end

  48 else if( neg_rs232_rx ) begin

  // rs232_rx

  49 bps_start_r <= 1’b1 ; //

  50 rx_int <= 1’b1 ; //

  51 end

  52 else if( num==4’d12 ) begin //

  53 bps_start_r <= 1’b0 ; //

  54 rx_int <= 1’b0 ; //

  55 end

  56

  57 assign bps_start = bps_start_r ;

  58

  59//———————————————————

  60 reg[ 7 : 0] rx_data_r ; //

  61 //———————————————————

  62

  63 reg[ 7 : 0] rx_temp_data ; //

  64

  65 always @ ( posedge clk or negedge rst_n )

  66 if(! rst_n ) begin

  67 rx_temp_data <= 8’d0 ;

  68 num <= 4’d0 ;

  69 rx_data_r <= 8’d0 ;

  70 end

  71 else if( rx_int ) begin //

  72 if( clk_bps ) begin

  // , 8bit 1 2

  73 num <= num+1’b1 ;

  74 case ( num)

  75 4’d1:rx_temp_data[0] <= rs232_rx; // 0bit

  76 4’d2:rx_temp_data [1] <= rs232_rx; // 1bit

  77 4’d3:rx_temp_data [2] <= rs232_rx; // 2bit

  78 4’d4:rx_temp_data [3] <= rs232_rx; // 3bit

  79 4’d5:rx_temp_data [4] <= rs232_rx; // 4bit

  80 4’d6:rx_temp_data [5] <= rs232_rx; // 5bit

  81 4’d7:rx_temp_data [6] <= rs232_rx; // 6bit

  82 4’d8:rx_temp_data [7] <= rs232_rx; // 7bit

  83 default : ;

  84 endcase

  85 end

  86 else if( num == 4’d12 ) begin//咱们的规范接纳形式下只要1+8+1(2)=11bit的有用数据

  87 num <= 4’d0 ; // STOP ,num

  88 rx_data_r <= rx_temp_data ; // rx_data

  89 end

  90 end

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/115704.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部