Showing results for 
Search instead for 
Did you mean: 
Honored Contributor I

altsyncram simulating, data changes on failing edge

I'm simulating altsyncram with Modelsim for Cyclone V. 

I use altsyncram instantiated as ROM. 


INCLUDE ""; FUNCTION mROM_256x18_1port( clock, address ) returns( q ); PARAMETERS ( FILE_MIF = "FILE.MIF" ); SUBDESIGN mROM_256x18_1port ( address : INPUT; clock : INPUT; q : OUTPUT; ) VARIABLE altsyncram_component : altsyncram WITH ( ADDRESS_ACLR_A = "NONE", CLOCK_ENABLE_INPUT_A = "BYPASS", CLOCK_ENABLE_OUTPUT_A = "BYPASS", INIT_FILE = FILE_MIF, INTENDED_DEVICE_FAMILY = "Cyclone V", LPM_HINT = "ENABLE_RUNTIME_MOD=NO", LPM_TYPE = "altsyncram", NUMWORDS_A = 256, OPERATION_MODE = "ROM", OUTDATA_ACLR_A = "NONE", OUTDATA_REG_A = "UNREGISTERED", WIDTHAD_A = 8, WIDTH_A = 18, WIDTH_BYTEENA_A = 1 ); BEGIN q = altsyncram_component.q_a; altsyncram_component.clock0 = clock; altsyncram_component.address_a = address; END;  


I've create simple project for testing the ROM only. 

Simple SystemVerilog file to compile parametrized ROM to SystemVerilog netlist to simulate with Modelsim: 

module ROM_Coeff_AHDL(address, data_out, clock ); input wire address; output reg data_out; input wire clock; mROM_256x18_1port# ( .FILE_MIF ("filt_triangle.mif") ) inst_mROM_256x18_1port ( .clock (clock), .address (address), .q (data_out) ); endmodule  


Testbench. Incrementing address with every clock rising edge: 

`timescale 1 ps/ 1 ps module memory_short_tb(); wire address; wire data_out; reg clk; reg addr_counter; ROM_Coeff_AHDL U_memory( .address (address), .data_out (data_out), .clock (clk) ); initial begin clk = 0; addr_counter = 0; end always# 1 clk = ~clk; always @ (posedge clk) begin addr_counter++; end // always assign address = addr_counter; endmodule 


And the result :  


Data changes on failing edge. 


But the datasheet says "Rising clock edges" on the page 3-2 . 


Why data changes on failing edge? Has anybody get the same issue? What is wrong? How to fix issue?
Tags (1)
0 Kudos
2 Replies
Honored Contributor I

the DSP Builder Advanced Blockset's Handbook mentioned an example of FFT known as "parallel floating-point fft" and has as a model file "demo_parallel_fpfft.mdl


and a second one named Variable-Size Floating-Point FFT,[/B] its model file is demo_fpvfft.mdl. 


Could anyone give me an explanation of what these designs examples demonstrate ?[/B]
Honored Contributor I

After changing 

always# 1 clk = ~clk; 


always# 10 clk = ~clk; 

Data bus updates 1 ps after rising edge of clock.