// Bitmap_VGA_Controller_top.v
// Bitmap_VGA_Controllerをテストするトップファイル
module Bitmap_VGA_Controller_top(SYS_CLK, SYS_RST, red_out, green_out, blue_out, hsyncx, vsyncx);
`include "Address_Map_Define.vh"
input wire SYS_CLK;
input wire SYS_RST;
output wire [3:0] red_out;
output wire [3:0] green_out;
output wire [3:0] blue_out;
output wire hsyncx;
output wire vsyncx;
wire clk_vga; // 65MHz クロック入力(VGA用)
wire clk_ddr2; // 150MHz クロック入力(DDR2へのインターフェース用)
wire reset_vga; // clk_vga用リセット
wire reset_ddr2; // clk_ddr2リセット
wire [31:0] vram_start_addr; // バイトアドレス
wire vram_request; // VRAMへのRead要求。アービタへ
wire vram_grant; // VRAMへのRead許可。アービタから
wire [31:0] vram_address; // バイトアドレス
wire read_write;
wire vram_req_we; // VRAM へのRead要求のWrite Enable
wire vram_addr_fifo_full; // VRAMのRead要求用FIFOのFULL
wire [31:0] vram_data_in;
reg vram_data_valid;
wire afifo_overflow; // 非同期FIFO のオーバーフロー・エラー
wire afifo_underflow; // 非同期FIFO
wire clk_ddr2_locked, clk_vga_locked;
reg [15:0] vram_data_in1, vram_data_in2;
reg vram_req_we_1d;
dcm_DDR2_VGA_clk dcm_DDR2_VGA_clk_i(
.sysclk(SYS_CLK),
.reset(SYS_RST),
.clk_ddr2(clk_ddr2),
.dcm_ddr2_locked(clk_ddr2_locked),
.clk_vga(clk_vga),
.dcm_vga_locked(clk_vga_locked)
);
assign reset_vga = SYS_RST | ~clk_vga_locked;
assign reset_ddr2 = SYS_RST | ~ clk_ddr2_locked;
Bitmap_VGA_Controller Bitmap_VGA_Cntrler_i(
.clk_vga(clk_vga),
.clk_ddr2(clk_ddr2),
.reset_vga(reset_vga),
.reset_ddr2(reset_ddr2),
.vram_start_addr(VRAM_START_ADDRESS),
.vram_request(vram_request),
.vram_grant(vram_grant),
.vram_address(vram_address),
.read_write(read_write),
.vram_req_we(vram_req_we),
.vram_addr_fifo_full(vram_addr_fifo_full),
.vram_data_in(vram_data_in),
.vram_data_valid(vram_data_valid),
.red_out(red_out),
.green_out(green_out),
.blue_out(blue_out),
.hsyncx(hsyncx),
.vsyncx(vsyncx),
.afifo_overflow(afifo_overflow),
.afifo_underflow(afifo_underflow)
);
assign vram_addr_fifo_full = 1'b0;
assign vram_grant = 1'b1;
always @(posedge clk_ddr2) begin // vram_req_weを1クロック遅延する
if (reset_ddr2)
vram_req_we_1d <= 1'b0;
else
vram_req_we_1d <= vram_req_we;
end
always @(posedge clk_ddr2) begin
if (reset_ddr2) begin
vram_data_in1 <= 16'h0000;
vram_data_in2 <= 16'h0fff;
end else begin
if (vram_req_we || vram_req_we_1d) begin // 1リクエストで2つデータを出力する
if (vram_address==VRAM_START_ADDRESS) begin
vram_data_in1 <= 16'h0000;
vram_data_in2 <= 16'h0000;
end else begin
vram_data_in1 <= vram_data_in1 + 16'd1;
vram_data_in2 <= vram_data_in2 + 16'd1;
end
end
end
end
assign vram_data_in = {vram_data_in1, vram_data_in2};
always @(posedge clk_ddr2) begin
if (reset_ddr2)
vram_data_valid <= 1'b0;
else begin
if (vram_req_we || vram_req_we_1d) // 1リクエストで2つデータを出力する
vram_data_valid <= 1'b1;
else
vram_data_valid <= 1'b0;
end
end
endmodule
`default_nettype wire
PIN "dcm_DDR2_VGA_clk_i/dcm_VGA_clk_dcm.CLKFX" TNM = VGA_CLK_OUTPUT;
PIN "dcm_DDR2_VGA_clk_i/dcm_DDR2_clk_dcm.CLKFX" TNM = DDR2_CLK_OUTPUT;
TIMESPEC TS_VGA2DDR2_CLK_TIG = FROM "VGA_CLK_OUTPUT" TO "DDR2_CLK_OUTPUT" TIG;
TIMESPEC TS_DDR22VGA_CLK_TIG = FROM "DDR2_CLK_OUTPUT" TO "VGA_CLK_OUTPUT" TIG;
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 | - | - | - | - |