%XILINX%\bin\nt\netgen -sim -ofmt verilog -mhf -w ..\ise\smm.ngc
%XILINX%\bin\nt\data2mem -bm ..\ise\smm_bd.bmm -bd ..\sdk\empty_application_0\Debug\empty_application_0.elf -bx ./
.INIT_FILE ( "lmb_bram_combined_0.mem" ),
@00000014
31 30 30 B9 80 B9 30 B8 E0 30 BE F9 B8 E9 F8 99 80 E8 E8 BE 30 B0 30 BC 30 99 80 30 F0 E9 B6 30
verilog work smm.v
verilog work lmb_bram_wrapper_sim.v
verilog work lmb_bram_elaborate_sim.v
verilog work lcd_test_rom_init.v
vhdl work ../src/timer.vhd
vhdl work ../src/lcd_ctlr.vhd
vhdl work ../src/lcd_ref.vhd
vhdl work ../Work/src/Simulation/lcd_ref_tb.vhd
verilog work glbl.v
%XILINX%\bin\nt\fuse work.lcd_ref_tb work.glbl -L unisims_ver=K:\HDL\Xilinx\13.1\ISE_DS\ISE\verilog\hdp\nt\unisims_ver -L unisim=K:\HDL\Xilinx\13.1\ISE_DS\ISE\vhdl\hdp\nt\unisim -o lcd_ref_tb.exe -prj lcd_ref_tb.prj
lcd_ref_tb.exe -gui
//
// 16ビット幅、2048ワードRAM
//
module rom_16x2k (clk, we, en, addr, din, dout);
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 11;
input wire [DATA_WIDTH-1:0] din;
input wire [ADDR_WIDTH-1:0] addr;
input wire we;
input wire clk;
input wire en;
output reg [DATA_WIDTH-1:0] dout;
(* RAM_STYLE="BLOCK" *) reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];
initial
$readmemh("rom_16x2k.data", ram, 0, 2047);
always @(posedge clk)
if (en) begin
dout <= ram[addr];
if (we)
ram[addr] <= din;
end
endmodule
// Program Memory
// rom_8x2k_hi rom_8x2k_hi_0 (
// .addr (pmem_addr),
// .clk (clk_sys),
// .din (pmem_din[15:8]),
// .dout (pmem_dout[15:8]),
// .en (pmem_cen),
// .we (pmem_wen[1])
// );
// rom_8x2k_lo rom_8x2k_lo_0 (
// .addr (pmem_addr),
// .clk (clk_sys),
// .din (pmem_din[7:0]),
// .dout (pmem_dout[7:0]),
// .en (pmem_cen),
// .we (pmem_wen[0])
// );
assign we_node = ~(pmem_wen[1] & pmem_wen[0]);
rom_16x2k rom_16x2k_inst (
.addr (pmem_addr),
.clk (clk_sys),
.din (pmem_din),
.dout (pmem_dout),
.en (~pmem_cen),
.we (we_node)
);
//initial
// begin
// // Read memory file
// #10 $readmemh("./pmem.mem", pmem);
//
// // Update Xilinx memory banks
// for (i=0; i<2048; i=i+1)
// begin
// dut.rom_8x2k_hi_0.inst.mem[i] = pmem[i][15:8];
// dut.rom_8x2k_lo_0.inst.mem[i] = pmem[i][7:0];
// end
//end
// initial // Normal end of test
// begin
// @(inst_pc===16'hffff)
// $display(" ===============================================");
// if (error!=0)
// begin
// $display("| SIMULATION FAILED |");
// $display("| (some verilog stimulus checks failed) |");
// end
// else if (~stimulus_done)
// begin
// $display("| SIMULATION FAILED |");
// $display("| (the verilog stimulus didn't complete) |");
// end
// else
// begin
// $display("| SIMULATION PASSED |");
// end
// $display(" ===============================================");
// $finish;
// end
//
// 16ビット幀048ワードRAM
//
module rom_16x2k (clk, we, en, addr, din, dout);
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 11;
input wire [DATA_WIDTH-1:0] din;
input wire [ADDR_WIDTH-1:0] addr;
input wire [1:0] we;
input wire clk;
input wire en;
output reg [DATA_WIDTH-1:0] dout;
(* RAM_STYLE="BLOCK" *) reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];
reg [(DATA_WIDTH/2)-1:0] di0, di1;
// The following code is only necessary if you wish to initialize the RAM
// contents via an external file (use $readmemb for binary data)
initial
$readmemh("rom_16x2k.data", ram, 0, 2047);
always @(we, din) begin
if (we[0])
di0 = din[(DATA_WIDTH/2)-1:0];
else
di0 = ram[addr][(DATA_WIDTH/2)-1:0];
if (we[1])
di1 = din[DATA_WIDTH-1:DATA_WIDTH/2];
else
di1 = ram[addr][DATA_WIDTH-1:DATA_WIDTH/2];
end
always @(posedge clk)
if (en) begin
dout <= {di1,di0};
ram[addr] <= {di1,di0};
end
endmodule
msp430-objcopy -O ihex pmem.elf pmem.ihex
../bin/ihex2mem.tcl -ihex pmem.ihex -out pmem.mem -mem_size $pmemsize
# Writing memory array to file
for {set i 0} {$i <= ($num_word-1)} {incr i} {
puts -nonewline $f_out "[format "%02s" $mem_arr($i) ]\n"
}
puts $f_out "\n"
close $f_out
exit 0
./ihex2data.tcl -ihex pmem.ihex -out rom_16x2k.data -mem_size 4098
4031
0300
40B2
5A80
0120
403F
0000
930F
2405
832F
//
// Initializing Block RAM from external data file
//
module v_rams_20c (clk, we, addr, din, dout);
input clk;
input we;
input [4:0] addr;
input [15:0] din;
output [15:0] dout;
reg [15:0] ram [0:31];
reg [15:0] dout;
initial begin
$readmemh("rams_20c.data",ram, 0, 31);
end
always @(posedge clk) begin
if (we)
ram[addr] <= din;
dout <= ram[addr];
end
endmodule
AABB
CCDD
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
reg [15:0] ram [0:31];
(* RAM_STYLE="BLOCK" *) reg [15:0] ram [0:31];
//
// Initializing Block RAM from external data file
//
module v_rams_20c (clk, we, addr, din, dout);
input clk;
input [1:0] we;
input [4:0] addr;
input [15:0] din;
output [15:0] dout;
(* RAM_STYLE="BLOCK" *) reg [15:0] ram [0:31];
// reg [15:0] ram [0:31];
reg [15:0] dout;
initial begin
$readmemh("rams_20c.data",ram, 0, 31);
end
always @(posedge clk) begin
dout <= ram[addr];
if (we[0])
ram[addr][7:0] <= din[7:0];
if (we[1])
ram[addr][15:8] <= din[15:8];
end
endmodule
//
// Initializing Block RAM from external data file
//
module v_rams_20c (clk, we, addr, din, dout);
parameter DATA_WIDTH = 16;
parameter ADDR_WIDTH = 5;
input wire [DATA_WIDTH-1:0] din;
input wire [ADDR_WIDTH-1:0] addr;
input wire [1:0] we;
input wire clk;
output reg [DATA_WIDTH-1:0] dout;
wire ram_ena;
assign ram_ena = 1'b1;
(* RAM_STYLE="BLOCK" *) reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];
reg [(DATA_WIDTH/2)-1:0] di0, di1;
// The following code is only necessary if you wish to initialize the RAM
// contents via an external file (use $readmemb for binary data)
initial
$readmemh("rams_20c.data", ram, 0, 31);
always @(we, din) begin
if (we[0])
di0 = din[(DATA_WIDTH/2)-1:0];
else
di0 = ram[addr][(DATA_WIDTH/2)-1:0];
if (we[1])
di1 = din[DATA_WIDTH-1:DATA_WIDTH/2];
else
di1 = ram[addr][DATA_WIDTH-1:DATA_WIDTH/2];
end
always @(posedge clk)
if (ram_ena) begin
dout <= {di1,di0};
ram[addr] <= {di1,di0};
end
endmodule
Spartan-3 SLICEM
Spartan-3E SLICEM
Spartan-3A Block RAM
Virtex-4 Block RAM
Virtex-5 Block RAM
Spartan-6 Block RAM
Virtex-6 Block RAM
# Create links
ln -s $elffile pmem.elf
ln -s $verfile stimulus.v
# Create links
cp -f $elffile pmem.elf
cp -f $verfile stimulus.v
../bin/rtlsim.sh stimulus.v pmem.mem $submitfile
-y /opt/Xilinx/12.2/ISE_DS/ISE/verilog/src/unisims/
-y /opt/Xilinx/12.2/ISE_DS/ISE/verilog/src/simprims/
-y /opt/Xilinx/12.2/ISE_DS/ISE/verilog/src/XilinxCoreLib/
-y /opt/Xilinx/13.1/ISE_DS/ISE/verilog/src/unisims/
-y /opt/Xilinx/13.1/ISE_DS/ISE/verilog/src/simprims/
-y /opt/Xilinx/13.1/ISE_DS/ISE/verilog/src/XilinxCoreLib/
// Debug UART interface data rate
// In order to properly setup the UART debug interface, you
// need to specify the DCO_CLK frequency (DBG_DCO_FREQ) and
// the chosen BAUD rate from the UART interface.
//
// `define DBG_UART_BAUD 9600
//`define DBG_UART_BAUD 19200
//`define DBG_UART_BAUD 38400
//`define DBG_UART_BAUD 57600
`define DBG_UART_BAUD 115200
//`define DBG_UART_BAUD 230400
//`define DBG_UART_BAUD 460800
//`define DBG_UART_BAUD 576000
//`define DBG_UART_BAUD 921600
// `define DBG_UART_BAUD 2000000
`define DBG_DCO_FREQ 20000000
`define DBG_UART_CNT ((`DBG_DCO_FREQ/`DBG_UART_BAUD)-1)
Error (10054): Verilog HDL File I/O error at openMSP430_fpga.v(35): can't open Verilog Design File "openMSP430_defines.v"
`include "openMSP430_defines.v"
`include "openmsp430/openMSP430_defines.v"
// Include/Exclude Serial Debug interface
//`define DBG_EN
// Include/Exclude Serial Debug interface
`define DBG_EN
# Original Clock Setting Name: klok
create_clock -period "33.333 ns" \
-name {CLOCK_24[0]} {CLOCK_24[0]}
ERROR:Place:665 - The design has 20 block-RAM components of which 20 block-RAM components require the adjacent multiplier site to remain empty. This is because certain input pins of adjacent block-RAM and multiplier sites share routing ressources. In addition, the design has 19 multiplier components. Therefore, the design would require a total of 39 multiplier sites on the device. The current device has only 36 multiplier sites.
elease 13.1 Map O.40d (nt)
Xilinx Mapping Report File for Design 'cray_sys_top'
Design Information
------------------
Command Line : map -intstyle ise -p xc6slx45t-fgg484-3 -w -logic_opt off -ol
high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off
-pr off -lc off -power off -o cray_sys_top_map.ncd cray_sys_top.ngd
cray_sys_top.pcf
Target Device : xc6slx45t
Target Package : fgg484
Target Speed : -3
Mapper Version : spartan6 -- $Revision: 1.55 $
Mapped Date : FRI 10 JUN 20:44:2 2011
Design Summary
--------------
Number of errors: 0
Number of warnings: 41
Slice Logic Utilization:
Number of Slice Registers: 7,489 out of 54,576 13%
Number used as Flip Flops: 7,366
Number used as Latches: 113
Number used as Latch-thrus: 0
Number used as AND/OR logics: 10
Number of Slice LUTs: 13,418 out of 27,288 49%
Number used as logic: 12,549 out of 27,288 45%
Number using O6 output only: 11,111
Number using O5 output only: 135
Number using O5 and O6: 1,303
Number used as ROM: 0
Number used as Memory: 699 out of 6,408 10%
Number used as Dual Port RAM: 176
Number using O6 output only: 0
Number using O5 output only: 0
Number using O5 and O6: 176
Number used as Single Port RAM: 0
Number used as Shift Register: 523
Number using O6 output only: 73
Number using O5 output only: 0
Number using O5 and O6: 450
Number used exclusively as route-thrus: 170
Number with same-slice register load: 158
Number with same-slice carry load: 12
Number with other load: 0
Slice Logic Distribution:
Number of occupied Slices: 5,273 out of 6,822 77%
Number of LUT Flip Flop pairs used: 14,928
Number with an unused Flip Flop: 8,330 out of 14,928 55%
Number with an unused LUT: 1,510 out of 14,928 10%
Number of fully used LUT-FF pairs: 5,088 out of 14,928 34%
Number of unique control sets: 165
Number of slice register sites lost
to control set restrictions: 268 out of 54,576 1%
A LUT Flip Flop pair for this architecture represents one LUT paired with
one Flip Flop within a slice. A control set is a unique combination of
clock, reset, set, and enable signals for a registered element.
The Slice Logic Distribution report is not meaningful if the design is
over-mapped for a non-slice resource or if Placement fails.
IO Utilization:
Number of bonded IOBs: 5 out of 296 1%
Specific Feature Utilization:
Number of RAMB16BWERs: 20 out of 116 17%
Number of RAMB8BWERs: 0 out of 232 0%
Number of BUFIO2/BUFIO2_2CLKs: 0 out of 32 0%
Number of BUFIO2FB/BUFIO2FB_2CLKs: 0 out of 32 0%
Number of BUFG/BUFGMUXs: 3 out of 16 18%
Number used as BUFGs: 3
Number used as BUFGMUX: 0
Number of DCM/DCM_CLKGENs: 0 out of 8 0%
Number of ILOGIC2/ISERDES2s: 0 out of 376 0%
Number of IODELAY2/IODRP2/IODRP2_MCBs: 0 out of 376 0%
Number of OLOGIC2/OSERDES2s: 0 out of 376 0%
Number of BSCANs: 0 out of 4 0%
Number of BUFHs: 0 out of 256 0%
Number of BUFPLLs: 0 out of 8 0%
Number of BUFPLL_MCBs: 0 out of 4 0%
Number of DSP48A1s: 18 out of 58 31%
Number of GTPA1_DUALs: 0 out of 2 0%
Number of ICAPs: 0 out of 1 0%
Number of MCBs: 0 out of 2 0%
Number of PCIE_A1s: 0 out of 1 0%
Number of PCILOGICSEs: 0 out of 2 0%
Number of PLL_ADVs: 0 out of 4 0%
Number of PMVs: 0 out of 1 0%
Number of STARTUPs: 0 out of 1 0%
Number of SUSPEND_SYNCs: 0 out of 1 0%
Average Fanout of Non-Clock Nets: 4.58
data2mem -bm memory.bmm -bd leds.elf -p xc3s200-4ft256 -bt openmsp430_fpga.bit
1.Project Navigatorで3S200FT256-4のプロジェクトを作成した。
2.openmsp430\trunk\fpga\xilinx_diligent_s3board\rtl\verilogにあるVerilogファイルを大体 Add Source した。
3.penmsp430\trunk\fpga\xilinx_diligent_s3board\synthesis\xilinx にあるopenMSP430_fpga.ucfもプロジェクトにAdd Sourceした。
4.openmsp430\trunk\fpga\xilinx_diligent_s3board\rtl\verilog\coregenにある4つのIPをAdd Copy of Source した。
Design Information
------------------
Command Line : map -intstyle ise -p xc3s200-ft256-4 -cm area -ir off -pr off
-c 100 -o openMSP430_fpga_map.ncd openMSP430_fpga.ngd openMSP430_fpga.pcf
Target Device : xc3s200
Target Package : ft256
Target Speed : -4
Mapper Version : spartan3 -- $Revision: 1.55 $
Mapped Date : THU 9 JUN 5:6:4 2011
Design Summary
--------------
Number of errors: 0
Number of warnings: 40
Logic Utilization:
Number of Slice Flip Flops: 1,060 out of 3,840 27%
Number of 4 input LUTs: 3,136 out of 3,840 81%
Logic Distribution:
Number of occupied Slices: 1,862 out of 1,920 96%
Number of Slices containing only related logic: 1,862 out of 1,862 100%
Number of Slices containing unrelated logic: 0 out of 1,862 0%
*See NOTES below for an explanation of the effects of unrelated logic.
Total Number of 4 input LUTs: 3,244 out of 3,840 84%
Number used as logic: 3,136
Number used as a route-thru: 108
The Slice Logic Distribution report is not meaningful if the design is
over-mapped for a non-slice resource or if Placement fails.
Number of bonded IOBs: 65 out of 173 37%
Number of RAMB16s: 4 out of 12 33%
Number of MULT18X18s: 1 out of 12 8%
Number of BUFGMUXs: 2 out of 8 25%
Number of DCMs: 1 out of 4 25%
Number of STARTUPs: 1 out of 1 100%
Average Fanout of Non-Clock Nets: 3.95
export PATH=/opt/mspgcc/bin:$PATH
make all
-- SLC, SDA を遅延させる
process(clk) begin
if clk'event and clk='1' then
if reset='1' then
SDA_Delay <= (others => '1');
SDA_ena_Delay <= (others => '1');
SCL_Delay <= '1';
else
SDA_Delay(2) <= SDA_shift_reg(8);
SDA_Delay(1) <= SDA_Delay(2);
SDA_Delay(0) <= SDA_Delay(1);
SDA_ena_Delay(1) <= SDA_enable;
SDA_ena_Delay(0) <= SDA_ena_Delay(1);
SCL_Delay <= SCL_shift_reg(17);
end if;
end if;
end process;
SRL16E_SDA : SRL16E generic map(
INIT => X"0000")
port map(
Q => SDA_Delay_SRL16,
A0 => '1',
A1 => '1',
A2 => '1',
A3 => '1',
CE => '1',
CLK => clk,
D => SDA_Delay(0)
);
SRL16E_SDA_ena : SRL16E generic map(
INIT => X"0000")
port map(
Q => SDA_ena_Delay_SR16,
A0 => '1',
A1 => '1',
A2 => '1',
A3 => '1',
CE => '1',
CLK => clk,
D => SDA_ena_Delay(0)
);
SDA <= SDA_Delay_SRL16 when SDA_ena_Delay_SR16='0' else 'Z';
SCL <= SCL_Delay;
NET "dvi_d[0]" IOSTANDARD = LVDCI_33;
NET "dvi_d[1]" IOSTANDARD = LVDCI_33;
NET "dvi_d[2]" IOSTANDARD = LVDCI_33;
NET "dvi_d[3]" IOSTANDARD = LVDCI_33;
NET "dvi_d[4]" IOSTANDARD = LVDCI_33;
NET "dvi_d[5]" IOSTANDARD = LVDCI_33;
NET "dvi_d[6]" IOSTANDARD = LVDCI_33;
NET "dvi_d[7]" IOSTANDARD = LVDCI_33;
NET "dvi_d[8]" IOSTANDARD = LVDCI_33;
NET "dvi_d[9]" IOSTANDARD = LVDCI_33;
NET "dvi_d[10]" IOSTANDARD = LVDCI_33;
NET "dvi_d[11]" IOSTANDARD = LVDCI_33;
NET "dvi_de" IOSTANDARD = LVCMOS33;
NET "dvi_hsync" IOSTANDARD = LVDCI_33;
NET "dvi_reset_b" IOSTANDARD = LVCMOS33;
NET "dvi_vsync" IOSTANDARD = LVDCI_33;
NET "dvi_xclk_n" IOSTANDARD = LVCMOS33;
NET "dvi_xclk_p" IOSTANDARD = LVCMOS33;
NET "dvi_xclk_n" DRIVE = 24;
NET "dvi_xclk_p" DRIVE = 24;
NET "dvi_xclk_n" SLEW = FAST;
NET "dvi_xclk_p" SLEW = FAST;
NET "reset_sw" IOSTANDARD = LVCMOS33;
NET "dvi_scl" LOC = U27;
NET "dvi_sda" LOC = T29;
NET "dvi_scl" IOSTANDARD = LVCMOS18;
NET "dvi_sda" IOSTANDARD = LVCMOS18;
NET "dvi_scl" SLEW = FAST;
NET "dvi_sda" SLEW = FAST;
NET "dvi_scl" DRIVE = 24;
NET "dvi_sda" DRIVE = 24;
NET "dvi_scl" TIG;
NET "dvi_sda" TIG;
NET "dvi_scl" PULLUP;
NET "dvi_sda" PULLUP;
INST "dvi_de" IOB = FORCE;
INST "dvi_hsync" IOB = FORCE;
INST "dvi_vsync" IOB = FORCE;
module test;
import "DPI-C" function integer add (input integer a, input integer b);
initial begin
$display("%x + %x = %x", 1, 2, add(1,2));
end
endmodule
#include "svdpi.h"
#include "Vour__Dpi.h"
int add (int a, int b) { return a+b; }
verilator -cc our.v --exe sc_main.cpp
module test;
import "DPI-C" function integer add (input integer a, input integer b);
int c;
initial begin
c = add(1, 2);
$display("%x + %x = %x", 1, 2, c);
$finish;
end
endmodule
make -j -f Vour.mk Vour
#include <verilated.h>
#include "Vour.h"
#include "svdpi.h"
#include "Vour__Dpi.h"
extern "C" int add (int a, int b) { return a+b; }
unsigned int main_time = 0; // Current simulation time
double sc_time_stamp () { // Called by $time in Verilog
return main_time;
}
int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv); // Remember args
Vour *top = new Vour(); // Create instance
while (!Verilated::gotFinish()) {
top->eval(); // 評価
main_time++;
}
top->final(); // シミュレーション終了
}
module test;
import "DPI-C" task add (input int a, input int b, output int result);
integer a, b, result;
initial begin
a = 1;
b = 2;
add(a, b, result);
$display("%x + %x = %x", a, b, result);
$finish;
end
endmodule
#include <verilated.h>
#include "Vour2.h"
#include "Vour2__Dpi.h"
extern "C" int add (int a, int b, int *result) {
*result = a + b;
return (0);
}
unsigned int main_time = 0; // Current simulation time
double sc_time_stamp () { // Called by $time in Verilog
return main_time;
}
int main(int argc, char** argv) {
Verilated::commandArgs(argc, argv); // Remember args
Vour2 *top = new Vour2(); // Create instance
while (!Verilated::gotFinish()) {
top->eval(); // 評価
main_time++;
}
top->final(); // シミュレーション終了
}
// CharDispCtrler_tb_sc.cpp
#include "VCharDispCtrler.h"
#include "verilated_vcd_sc.h"
int sc_main(int argc, char **argv) {
Verilated::commandArgs(argc, argv); // Remember args
sc_clock clk ("clk", 40, SC_NS);
sc_signal<bool> reset;
sc_signal<uint32_t> processor_addr;
sc_signal<uint32_t> processor_din;
sc_signal<bool> processor_we;
sc_signal<bool> VGA_RED, VGA_GREEN, VGA_BLUE;
sc_signal<bool> VGA_HSYNC, VGA_VSYNC;
int clk_count;
VCharDispCtrler *top;
top = new VCharDispCtrler("top");
top->clk(clk);
top->reset(reset);
top->processor_addr(processor_addr);
top->processor_din(processor_din);
top->processor_we(processor_we);
top->VGA_RED(VGA_RED);
top->VGA_GREEN(VGA_GREEN);
top->VGA_BLUE(VGA_BLUE);
top->VGA_HSYNC(VGA_HSYNC);
top->VGA_VSYNC(VGA_VSYNC);
Verilated::traceEverOn(true);
VerilatedVcdC* tfp = new VerilatedVcdC;
top->trace (tfp, 99);
tfp->open ("simx_sc.vcd");
processor_addr = 0;
processor_din = 0;
processor_we = 0;
reset = 1;
sc_start(45, SC_NS);
reset = 0;
sc_start(160, SC_NS);
processor_din = 0x3B0; // RGB=111(最上位), キャラクタ0
sc_start(40, SC_NS);
processor_we = 1;
processor_addr = 80; // 画面の2行1列目のキャラクタのアドレス
sc_start(40, SC_NS);
processor_we = 0;
processor_din = 0x3C1; // RGB=111(最上位), キャラクタA
sc_start(40, SC_NS);
processor_we = 1;
processor_addr = 81; // 画面の2行2列目のキャラクタのアドレス
sc_start(40, SC_NS);
processor_we = 0;
sc_start(20000000, SC_NS);
tfp->close();
delete top;
exit(0); // シミュレーション終了
}
verilator -Wno-lint -sc --trace CharDispCtrler.v --exe CharDispCtrler_tb_sc.cpp
1.glbl.vをWebサイトからダウンロードしたファイルに交換(これでglbl.vは終了)
2.module文の下に、// verilator tracing_offを挿入した
3.tri0 GSRを含むラインを消去した
4.GSRをglbl.GSRに置換した
5.initial文内の<= を= に置換した
6.遅延を表す#100 などを消去した
7.char_gen_rom.v, frame_buffer.v にglbl glbl;文を追加した
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | 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 | - | - |