2017-06-28 3 views
0

基本的に、マイナスの傾きのある線が表示されるようにします。私が書いた現在のコードは、正に傾斜した線を完全に表示しますが、負の値にしようとすると、表示されないか点線になります。 私はそれがうまくいかない理由をあいまいに考えていますが、誰かが私を正しい方向に向けることができれば、それは大いに感謝するでしょう。システムのVerilogに負の傾きのある線をVGAで表示したい(正の傾斜線が正しく表示されます)

(注意:私のVGAドライバが正常に動作だけでなく、VGAWrapper)

これはコードです:

module vga_rgb(
    input logic [8:0] row_o, 
    input logic [9:0] column_o, 
    input logic clk_i,reset_i, 
    output logic [15:0]rgb_i 
    ); 

    localparam X1 = 10'd200; 
    localparam Y1 = 9'd100; 

    localparam X2 = 10'd400; 
    localparam Y2 = 9'd300; 

    wire [15:0] slope = ((Y2-Y1)/(X2-X1)); 

    [email protected](posedge clk_i, posedge reset_i) 
    if (reset_i) 
     rgb_i <= 16'b0; 
    else 
     if (((row_o-Y1) == (slope * (column_o-X1))) && ((row_o < 300) && (row_o > 100/))) 
     rgb_i <= 16'b0; 
     else   
     rgb_i <= 16'b11111_111111_11111; 
+0

私は言及する必要があります、モニターは640by480 – DIB98

+0

私は何らかの整数オーバーフローエラーを疑う。 – mkrieger1

答えて

0

あなたはほとんどそこにいます。問題は、負の傾きがあることです。これは、現在、Verilogではきわめて扱いにくい符号付き量を取り扱っていることです。心に留めておくべき

二つの主なルールは以下のとおりです。

  1. は、符号ビットのための余分なビットを割り当てるようにしてください。あなたは は10bの0..1023を符号なしで表すことができますが。 が署名されたとき、-512..511になります。
  2. Verilogでは、の両方がのオペランドに署名されていない限り、演算オペレーションの結果は符号なし です。これは通常、新入者にとって驚くべき振る舞いですが、それが言語の仕組みです。
  3. 少数の署名注釈付きそう

、あなたの定数の幅を固定し、1ビットへの出力を減らし、そして私は、私はこれで終わるカット&ペーストのエラーだったもの推測何修復:

module vga_rgb(
    input wire [8:0] row_o, 
    input wire [9:0] column_o, 
    input logic clk_i,reset_i, 
    output logic rgb_i 
    ); 

    localparam X1 = 11'sd200; 
    localparam Y1 = 10'sd100; 

    localparam X2 = 11'sd400; 
    localparam Y2 = 10'sd300; 

    wire signed [15:0] slope = ((Y2-Y1)/(X2-X1)); 

    [email protected](posedge clk_i, posedge reset_i) 
    if (reset_i) 
     rgb_i <= 16'b0; 
    else 
     if ((($signed({1'b0, row_o})-Y1) == (slope * ($signed({1'b0, column_o})-X1))) && ((row_o < Y2) && (row_o > Y1))) 
     rgb_i <= 1'b1; 
     else 
     rgb_i <= 1'b0; 

endmodule 

注意すべきいくつかのこと:

  1. ザ・「S」localparamsでは符号付きとして扱われるべき値を強制的に署名し、一定
  2. $署名したシステムタスクを示します。先頭のゼロをどのように追加したのかを確認してください。受信信号の上位ビットがセットされていれば、誤って負の数を取得することはありません。
+0

ああ、ありがとう、フィードバックのために!これは本当に私のために物事をクリアしました、私はそれを感謝します:) – DIB98

+0

それは助けてよかった。私の説明が十分だと思えば、答えを受け入れてください。 –

関連する問題