Verilgソースはこんな感じ。clkは外から25MHzをいれる。Spartan3 stater kitのクロックは50MHzなので、DCMで分周して25MHzを作っています。出力のr,g,bもregにした方がよさそう。微妙にタイミングがずれてるっぽいけど、それっぽい画面が出ているのでいいことにしよう。
ソースをはると、htmlだからtabとか空白がなくなっちゃうので<pre>タグをいれてみました。tabも8になるから空白4つで置換して・・・ってめんどくさい。いずれにしろ、長いソースを貼るのはむりっぽい。なんか妙に空行になったり変。
ソースをはると、htmlだからtabとか空白がなくなっちゃうので<pre>タグをいれてみました。tabも8になるから空白4つで置換して・・・ってめんどくさい。いずれにしろ、長いソースを貼るのはむりっぽい。なんか妙に空行になったり変。
/* VGA 16 front porch 96 horizontal sync 48 back porch 640 video total 800 10 front porch 2 vertical sync 33 back porch 480 video total 525 */ module video( output [2:0] r, g, b, output reg hs = 1'b1, vs = 1'b1, input clk); reg [9:0] xc = 0, yc = 0; reg xe = 0, ye = 0; always @(posedge clk) begin if(xc == 800 - 1) xc <= 0; else xc <= xc + 1;
if(xc == 800 - 1) xe <= 1'b1;
if(xc == 640 - 1) xe <= 1'b0;
if(xc == 640 + 16 - 1) hs <= 1'b0;
if(xc == 640 + 16 + 96 - 1) hs <= 1'b1;
if(xc == 640 + 16 - 1) begin if(yc == 525 - 1) yc <= 0; else yc <= yc + 1;
if(yc == 525 - 1) ye <= 1'b1;
if(yc == 480 - 1) ye <= 1'b0;
if(yc == 480 + 10 - 1) vs <= 1'b0;
if(yc == 480 + 10 + 2 - 1) vs <= 1'b1;
end end wire en = xe & ye; assign b = en & yc[4] ? xc[6:4] : 0; assign r = en & yc[5] ? xc[6:4] : 0; assign g = en & yc[6] ? xc[6:4] : 0; endmodule