Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17268 Discussions

Problems with VHDL lookup table

Altera_Forum
Honored Contributor II
2,015 Views

Hi,

 

I'm trying to debug a Cyclone design which writes values taken from a

lookup table to the address inputs of a crosspoint analog switch. The

problem is that everything looks OK in the Quartus simulator, but when

I test the design on the target hardware it seems to be pulling the

wrong values out of the LUT. I have tried enabling SignalTap and

probing the output pins during the write operation, SignalTap reports

correct operation but the outputs, as measured on a real logic

analyser, are wrong.

 

E.g. for CHANNEL=1, eeprom_en='0', path=0 I should get 0,0,0,0,B,A,

3,2, I actually get 0,0,0,0,9,8,3,2

 

The lookup table is implemented thus:

 

Code:

 

 

There are 3 instances of this code in the design, with different

switch mappings selected by the CHANNEL parameter. They all show the

same problem, 'B','A' is consistently replaced by '9','8'.

 

I can't resolve this discrepancy I'm seeing between what the tools are

telling me and the behaviour when running on the target. The internal

PLL is being used to generate a 57.6 MHz global clock; Quartus timing

analysis shows f_max as about 85 MHz so i don't think it is a timing

issue. I have checked the pin assignments by driving the AX outputs

with a 4-bit counter which cycles continuously, this works correctly

as seen on the simulator and the external logic analyser.

 

Any ideas?

 

TIA

 

R.

0 Kudos
6 Replies
Altera_Forum
Honored Contributor II
1,190 Views

Synchronise your design. Currently it is asynchronous.

0 Kudos
Altera_Forum
Honored Contributor II
1,190 Views

 

--- Quote Start ---  

Hi, 

 

Any ideas? 

 

TIA 

 

R. 

--- Quote End ---  

 

 

Try to use binairy values instead of hex values. I've had problems in the past with the x-prefix. So replace x"A" with "1010" and x"B" with "1011" and so on. 

 

Ton
0 Kudos
Altera_Forum
Honored Contributor II
1,190 Views

TO_BE_DONE

0 Kudos
Altera_Forum
Honored Contributor II
1,190 Views

have you tried building this with and array rather than a load of literals? that is the altera recommended coding style for a rom.

0 Kudos
Altera_Forum
Honored Contributor II
1,190 Views

 

--- Quote Start ---  

I have tried enabling SignalTap and 

probing the output pins during the write operation, SignalTap reports 

correct operation but the outputs, as measured on a real logic 

analyser, are wrong. 

 

E.g. for CHANNEL=1, eeprom_en='0', path=0 I should get 0,0,0,0,B,A, 

3,2, I actually get 0,0,0,0,9,8,3,2 

 

--- Quote End ---  

 

 

When even SignalTap reports correct behavior, it looks like a problem that is related to your hardware somehow, e.g. an incorrect pin-out, bad soldering-joint or a short-circuit between two pins, etc. Have you measured also with a scope to see if you get clean logic-levels on the outputs? 

 

Thomas
0 Kudos
Altera_Forum
Honored Contributor II
1,190 Views

OK, all resolved now. 

 

The LUT was behaving as designed all along - but the analog switch IC has non-sequential mapping of AX addresses to analog channels! This info got lost between myself and the guy testing the hardware. 

 

[Must read the datasheets a bit more thoroughly next time] 

 

Thanks to all who replied.
0 Kudos
Reply