... | ... | @@ -240,19 +240,23 @@ module databram(addr1, rdata1, we1, wdata1, addr2, rdata2, we2, wdata2, clk); |
|
|
|
|
|
// 第一ポート:Write-first(書いた場合、その値がそのままrdata1として得られる)
|
|
|
// ただし、第二ポートに書き込んだアドレスと同じアドレスを読み出した時、記述に反して値は不定
|
|
|
if (we1) begin
|
|
|
mem[addr1] <= wdata1;
|
|
|
rdata1 <= wdata1;
|
|
|
end else begin
|
|
|
rdata1 <= mem[addr1];
|
|
|
always @(posedge clk) begin
|
|
|
if (we1) begin
|
|
|
mem[addr1] <= wdata1;
|
|
|
rdata1 <= wdata1;
|
|
|
end else begin
|
|
|
rdata1 <= mem[addr1];
|
|
|
end
|
|
|
end
|
|
|
// 第二ポート:Write-first(書いた場合、その値がそのままrdata2として得られる)
|
|
|
// ただし、第二ポートに書き込んだアドレスと同じアドレスを読み出した時、記述に反して値は不定
|
|
|
if (we2) begin
|
|
|
mem[addr2] <= wdata2;
|
|
|
rdata2 <= wdata2;
|
|
|
end else begin
|
|
|
rdata2 <= mem[addr2];
|
|
|
always @(posedge clk) begin
|
|
|
if (we2) begin
|
|
|
mem[addr2] <= wdata2;
|
|
|
rdata2 <= wdata2;
|
|
|
end else begin
|
|
|
rdata2 <= mem[addr2];
|
|
|
end
|
|
|
end
|
|
|
endmodule
|
|
|
```
|
... | ... | @@ -278,11 +282,13 @@ module databram(addr1, rdata1, we1, wdata1, addr2, rdata2, we2, wdata2, clk); |
|
|
// また、バイトイネーブル付きだと推論してくれない(自前でバンク化するなどで対処する必要がある)
|
|
|
|
|
|
// 第一ポート:Write-first(書いた場合、その値がそのままrdata1として得られる)
|
|
|
if (we2) begin
|
|
|
mem[addr1] <= wdata1;
|
|
|
rdata1 <= wdata1;
|
|
|
end else begin
|
|
|
rdata1 <= mem[addr1];
|
|
|
always @(posedge clk) begin
|
|
|
if (we1) begin
|
|
|
mem[addr1] <= wdata1;
|
|
|
rdata1 <= wdata1;
|
|
|
end else begin
|
|
|
rdata1 <= mem[addr1];
|
|
|
end
|
|
|
end
|
|
|
// 第二ポート:Read-first(書き込む前の値がrdata2として得られる)
|
|
|
// ただし、第一ポートに書き込んだアドレスと同じアドレスを読み出した時、記述に反して値は不定
|
... | ... | |