하다 보면 언젠간 언어도 익히고 작동도 하겠지머..

일단 sync만 인식을 하는지 절전모드였던 모니터가 살아나기는 하는데 해상도 정보까진 못 띄우네

DE0-nano에 시도중

vga640x480 vga(

CLOCK_50,

KEY[0],

LED,

GP0[6],

GP0[5],

{GP0[16],GP0[19],GP0[18],GP0[21]},

{GP0[12],GP0[15],GP0[14],GP0[17]},

{GP0[8],GP0[9],GP0[10],GP0[13]}

); 


module vga640x480(

input clk,

input rst,

output [7:0] LED,

output reg hsync,

output reg vsync,

output [3:0] r,

output [3:0] g,

output [3:0] b

);


parameter HSYNC = 189;

parameter HBP = (HSYNC + 95);

parameter HVID = (HBP + 1260);

parameter HFP = (HVID + 47);


parameter VSYNC = 3000;

parameter VBP = (VSYNC + 51000);

parameter VVID = (VBP + 762500);

parameter VFP = (VVID + 17500);


reg [19:0] cnt;


always @ (posedge clk or negedge rst)

begin

if (~rst)

cnt <= 0;

else

begin

if(cnt < 834000)

begin

cnt <= cnt + 1;

if((cnt % 1590) < HSYNC)

hsync <= 1;

else hsync <= 0;

if(cnt < VSYNC)

vsync <= 1;

else vsync <= 0;

end

else

cnt <= 0;

end

end


assign LED[0] = vsync;

assign LED[1] = hsync;


endmodule 


위의 수치는 아래의 계산에 의해서 나온 것 임.

vga_640x480.xlsx


+

parameter는 이전 값을 더해서 쓸수는 없는건가..

HFP를 이용해서 % 연산을 하면 정상적으로 작동하지 않는 것으로 보이네..



+

sync 구간에만 0이고 나머지는 1로 vsync/hsync 출력해야 하네?

[링크 : https://ws0.org/how-to-generate-a-vga-signal-with-a-fpga/]

[링크 : http://www.cs.ucr.edu/~jtarango/cs122a_lab4.html]

[링크 : https://www.nandland.com/goboard/vga-introduction-test-patterns.html]


+

단순하게 데이터만 출력한다고 나오는게 아닌가?

아무튼.. modelsim 쓰는법 배워서 출력 시그널 확인을 할 필요가 있을 듯...

module vga640x480(

input clk,

input rst,

output [7:0] LED,

output reg hsync,

output reg vsync,

output reg [3:0] r,

output reg [3:0] g,

output reg [3:0] b

);


parameter HSYNC = 189;

parameter HBP = (HSYNC + 95);

parameter HVID = (HBP + 1260);

parameter HFP = (HVID + 47);


parameter VSYNC = 3000;

parameter VBP = (VSYNC + 51000);

parameter VVID = (VBP + 762500);

parameter VFP = (VVID + 17500);


reg [19:0] cnt;


always @ (posedge clk or negedge rst)

begin

if (~rst)

begin

cnt <= 0;

hsync <= 1;

vsync <= 1;

end

else

begin

if(cnt < 834000)

begin

cnt <= cnt + 1;

if((cnt % 1590) < HSYNC)

hsync <= 0;

else hsync <= 1;

if(cnt < VSYNC)

vsync <= 0;

else vsync <= 1;

if(vsync & hsync)

begin

r <= 4'b1111;

g <= 4'b1111;

b <= 4'b1111;

end

else

begin

r <= 4'b0000;

g <= 4'b0000;

b <= 4'b0000;

end

end

else

cnt <= 0;

end

end


assign LED[0] = ~vsync;

assign LED[1] = ~hsync;


endmodule 


+

2018.06.04

하드웨어 구조는 모르겠지만 동일 셋트 예제 발견

[링크 : https://github.com/theapi/de0-nano/blob/master/vga/experiment/vga_demo.v]

Posted by 구차니