`default_nettype none
module Dual_Port_Memory_test(/*autoport*/
//output
dout,
//input
clk,
we,
waddr,
raddr,
din);
input wire clk;
input wire we;
input wire [9:0] waddr; // 1024
input wire [9:0] raddr; // 1024
input wire [31:0] din;
output reg [31:0] dout;
reg [31:0] ram [0:1023];
initial begin : memory_initialize
integer i;
for (i=0; i<1024; i=i+1)
ram[i] = 0;
end
always @(posedge clk) begin
if (we)
ram[waddr] <= din;
dout <= ram[raddr];
end
endmodule
`default_nettype wire
`default_nettype none
module Dual_Port_Memory_test #(
parameter integer C_MEMORY_SIZE = 1024, // Word Memory Size (not byte)
parameter integer DATA_BUS_WIDTH = 32 // RAM Data Width
)
(
input wire clk,
input wire we,
input wire [log2(C_MEMORY_SIZE)-1:0] waddr,
input wire [log2(C_MEMORY_SIZE)-1:0] raddr,
input wire [DATA_BUS_WIDTH-1:0] din,
output reg [DATA_BUS_WIDTH-1:0] dout
);
// Beyond Circuts, Constant Function in Verilog 2001を参照しました
// http://www.beyond-circuits.com/wordpress/2008/11/constant-functions/
function integer log2;
input integer addr;
begin
addr = addr - 1;
for (log2=0; addr>0; log2=log2+1)
addr = addr >> 1;
end
endfunction
reg [DATA_BUS_WIDTH-1:0] ram [0:C_MEMORY_SIZE-1];
initial begin : memory_initialize
integer i;
for (i=0; i<C_MEMORY_SIZE; i=i+1)
ram[i] = 0;
end
always @(posedge clk) begin
if (we)
ram[waddr] <= din;
dout <= ram[raddr];
end
endmodule
`default_nettype wire
(*S="TRUE"*) reg vback_porch_clk_ddr2, vback_p_clk_ddr2_node;
true
ネットは、次のように処理されます。
– 最適化から保護されます。
– ChipScope ツールを使用したデバッグ用にマークされます。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 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 | - | - | - | - | - | - |