【求助】ISE联合Modelsim仿真波形为什么出现红线和蓝线?

2019-07-15 21:43发布

QQ图片20170514224435.png 如图。然而下载到开发板可以正常运行,网上说是要添加复位信号,请问怎样添加复位?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
飞了咖啡
2019-07-16 07:22
module vga_test(
         input rst_n,
                        input fpga_gclk,
                        output vga_hs,
                        output vga_vs,
                        output [4:0] vga_r,
                        output [5:0] vga_g,
                        output [4:0] vga_b,
                        input key1                        //按键key1
    );


parameter LinePeriod =1344;            //行周期数
parameter H_SyncPulse=136;             //行同步脉冲(Sync a)
parameter H_BackPorch=160;             //显示后沿(Back porch b)
parameter H_ActivePix=1024;            //显示时序段(Display interval c)
parameter H_FrontPorch=24;             //显示前沿(Front porch d)
parameter Hde_start=296;
parameter Hde_end=1320;

//-----------------------------------------------------------//
// 垂直扫描参数的设定1024*768 60Hz VGA
//-----------------------------------------------------------//
parameter FramePeriod =806;           //列周期数
parameter V_SyncPulse=6;              //列同步脉冲(Sync o)
parameter V_BackPorch=29;             //显示后沿(Back porch p)
parameter V_ActivePix=768;            //显示时序段(Display interval q)
parameter V_FrontPorch=3;             //显示前沿(Front porch r)
parameter Vde_start=35;
parameter Vde_end=803;


reg[10 : 0] x_cnt;
  reg[9 : 0]  y_cnt;
  reg[15 : 0] grid_data_1;
  reg[15 : 0] grid_data_2;
  reg[15 : 0] bar_data;
  reg[3 : 0] vga_dis_mode;
  reg[4 : 0]  vga_r_reg;
  reg[5 : 0]  vga_g_reg;
  reg[4 : 0]  vga_b_reg;  
  reg hsync_r;
  reg vsync_r;
  reg hsync_de;
  reg vsync_de;
  
  reg [15:0] key1_counter;                 //按键检测寄存器
  
  wire vga_clk;
  wire CLK_OUT1;
  wire CLK_OUT2;
  wire CLK_OUT3;
  wire CLK_OUT4;
  
  wire [12:0]  bar_interval;  
assign        bar_interval         = H_ActivePix[15: 3];         //彩条宽度=H_ActivePix/8  
  
//----------------------------------------------------------------
////////// 水平扫描计数
//----------------------------------------------------------------
always @ (posedge vga_clk)
       if(~rst_n)    x_cnt <= 1;
       else if(x_cnt == LinePeriod) x_cnt <= 1;
       else x_cnt <= x_cnt+ 1;
                 
//----------------------------------------------------------------
////////// 水平扫描信号hsync,hsync_de产生
//----------------------------------------------------------------
always @ (posedge vga_clk)
   begin
       if(~rst_n) hsync_r <= 1'b1;
       else if(x_cnt == 1) hsync_r <= 1'b0;            //产生hsync信号
       else if(x_cnt == H_SyncPulse) hsync_r <= 1'b1;
                 
                                  
            if(~rst_n) hsync_de <= 1'b0;
       else if(x_cnt == Hde_start) hsync_de <= 1'b1;    //产生hsync_de信号
       else if(x_cnt == Hde_end) hsync_de <= 1'b0;       
        end

//----------------------------------------------------------------
////////// 垂直扫描计数
//----------------------------------------------------------------
always @ (posedge vga_clk)
       if(~rst_n) y_cnt <= 1;
       else if(y_cnt == FramePeriod) y_cnt <= 1;
       else if(x_cnt == LinePeriod) y_cnt <= y_cnt+1;

//----------------------------------------------------------------
////////// 垂直扫描信号vsync, vsync_de产生
//----------------------------------------------------------------
always @ (posedge vga_clk)
  begin
       if(~rst_n) vsync_r <= 1'b1;
       else if(y_cnt == 1) vsync_r <= 1'b0;    //产生vsync信号
       else if(y_cnt == V_SyncPulse) vsync_r <= 1'b1;
                 
            if(~rst_n) vsync_de <= 1'b0;
       else if(y_cnt == Vde_start) vsync_de <= 1'b1;    //产生vsync_de信号
       else if(y_cnt == Vde_end) vsync_de <= 1'b0;         
  end


assign vga_hs = hsync_r;
  assign vga_vs = vsync_r;  
  assign vga_r = (hsync_de & vsync_de)?vga_r_reg:5'b00000;
  assign vga_g = (hsync_de & vsync_de)?vga_g_reg:6'b000000;
  assign vga_b = (hsync_de & vsync_de)?vga_b_reg:5'b00000;
  assign vga_clk = CLK_OUT3;  //VGA时钟频率选择65Mhz
  
  
   pll pll_inst
  (// Clock in ports
   .CLK_IN1(fpga_gclk),      // IN
   .CLK_OUT1(CLK_OUT1),     // 21.175Mhz for 640x480(60hz)
   .CLK_OUT2(CLK_OUT2),     // 40.0Mhz for 800x600(60hz)
   .CLK_OUT3(CLK_OUT3),     // 65.0Mhz for 1024x768(60hz)
   .CLK_OUT4(CLK_OUT4),     // 108.0Mhz for 1280x1024(60hz)
   .RESET(0),               // reset input
   .LOCKED(LOCKED));        // OUT
// INST_TAG_END ------ End INSTANTIATI

//按钮处理程序       
  always @(posedge vga_clk)
          begin
            if (key1==1'b0)                               //如果按钮没有按下,寄存器为0
               key1_counter<=0;
            else if ((key1==1'b1)& (key1_counter<=16'hc350))      //如果按钮按下并按下时间少于1ms,计数      
          key1_counter<=key1_counter+1'b1;
            
       if (key1_counter==16'hc349)                //一次按钮有效,改变显示模式
                    begin
                      if(vga_dis_mode==4'b1101)
                              vga_dis_mode<=4'b0000;
                           else
                              vga_dis_mode<=vga_dis_mode+1'b1;
          end       
     end                         
          

endmodule


主要程序如上

一周热门 更多>