Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarAprMayJunJulAugSepOctNovDec2017
2018JanFebMarAprMayJunJulAugSepOctNovDec2018
2019JanFebMarAprMayJunJulAugSepOctNovDec2019
2020JanFebMarAprMay2020

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search

Messages from 118125

Article: 118125
Subject: Re: Block RAM strange behavior, address off by one
From: Newman <newman5382@yahoo.com>
Date: 17 Apr 2007 22:21:50 -0700
Links: << >>  << T >>  << A >>
On Apr 17, 11:02 pm, Peter Alfke <a...@sbcglobal.net> wrote:
> A few ideas:
> Are you sure about the content of the various locations?
> Could the error have happened when you wrote data into the BRAM?
>
> When reading, read twicein sequence from the same address. Then you
> will see whether this is a read pipelining problem, or whether you
> really are always reading the wrong information.
> The error has to somewhere in your timing.
>
> Be a sleuth!
> Peter Alfke
>
> On Apr 17, 7:12 pm, Gabor <g...@alacron.com> wrote:
>
>
>
> > On Apr 17, 8:13 pm, "M. Hamed" <mhs...@gmail.com> wrote:
>
> > > I am getting a strange error with Block RAM on a Spartan 3 FPGA. Every
> > > time I issue a read, the word at the location previous to the given
> > > address is read. For example if I'm reading from address 5, the word
> > > at address 4 is output instead. The data written to the block seems
> > > correct when I view it in ModelSim so I assume it's something with the
> > > read.
>
> > This does seem strange.  Are your writes and reads always made to
> > sequential memory locations (i.e. 1, 2, 3, ... in order)?  Perhaps the
> > error is in cycle timing and not address?
>
> > > Viewing signals at the BRAM input in ModelSim shows the correct
> > > address at the input of port A and the read clock signal goes high but
> > > the wrong word appear at the output. ENA is always 1 and WEA is always
> > > 0. The very most recent Write to this same address (from a different
> > > port) also shows the correct value being written.
>
> > > The design works correctly in RTL but this problem only occurs with
> > > the post-route netlist.
>
> > > Did anyone encounter a similar problem like this before and can give
> > > me a hint on what's going on.
>
> > The only time I've seen something similar was with an old version of
> > the
> > BRAM simulation models that needed a slight positive hold time in the
> > address.  In effect it was the behavioral simulation that incorrectly
> > gave
> > the read data on the same clock that the address was presented.  In
> > fact
> > BRAM's are registered in the Spartan 3 (and Virtex 2) series, so the
> > output data should have changed on the following clock cycle.  In the
> > post-PAR timing simulation, the output changed on the following clock
> > cycle as expected.
>
> > > Thank you.- Hide quoted text -
>
> - Show quoted text -

If you generated the block RAM with coregen, there is an option to
preload the RAM with a coe file.  You can then simulate the block RAM
both at the RTL and post P&R level, disable the writes in the code
and
see if you read the expected data designated by the coe file at the
desired addresses.

There are some instances when the RTL does not match the post P&R
simulation.  i.e. (sensitivity list is incomplete in a combinatorial
process,
improper use of blocking assignments and variables)  I don't use the
later two items
in synthesizable code, so I don't have much experience with them, but
then
again, I never get an RTL vs post P&R simulation mismatch because of
them.

Hope this helps,
Newman



Article: 118126
Subject: Analog FPGAs: how fast?
From: "David M. Palmer" <dmpalmer@email.com>
Date: Wed, 18 Apr 2007 05:25:35 GMT
Links: << >>  << T >>  << A >>
What sorts of frequencies can currently-available analog FPGAs run at?
(Either pure analog, or mixed such as the Actel Fusion.)

For example, if I wanted a gated integrator with a sub-microsecond
gating windows, what product lines, if any, can handle that?

I know e.g. that the Fusion has a 600 ksample/s ADC with a multiplexer,
but I don't know the bandwidth of the amplifiers etc. in the analog
blocks.

Thanks.

-- 
David M. Palmer  dmpalmer@email.com (formerly @clark.net, @ematic.com)

Article: 118127
Subject: BFM simulation and number of Masters?
From: ferorcue <le_marq@hotmail.com>
Date: 17 Apr 2007 23:12:12 -0700
Links: << >>  << T >>  << A >>
Hello,

First of all I will make my question: Could you please say me  how
many Masters can be connected to the Bus when the BFM simulation is
been used?

I created a coprocessor for the embedded PowerPC, and two files to
implement a bridge between the PLB Bus and the Bus of my coprocessor
( small bus called On Chip Bus).
I have a Master which is able to read all the operations from a txt
file. this is my sistem

                           BFM Bus
file.txt --> Master_1 -->|
                                 |
                                 |-->bridge_plb2ocb
                                 |
coprocessor(bus on chip bus ocb)
                                 |-->bridge_ocb2plb
                                 |
                 Register<--|

I am using the BFM simulation because I got always problems with the
behavioural simulation( i have a problem that i posted here and i do
not have the solution yet(
http://groups.google.com/group/comp.arch.fpga/browse_thread/thread/c4be67a12afae957/1098d98a5af6caf8?lnk=gst&q=ferorcue&rnum=2&hl=en#1098d98a5af6caf8
))


The point is that Master_1 and bridge_ocb2plb are both masters and the
system it is not working. Only the master that is mapped in the memory
address 0x00000000 it is working. I checked first with Master_1 mapped
in 0x0, and later with bridge_ocb2plb mapped in 0x0, and the bus of
the BFM simulation only answer or hear the request of one of both
masters, the one which is mapped in the 0x0.

I think that you have more experience with embedded systems, do you
think that what i am writing here make sense? It is possible that the
BFM simulation only allow to have one Master in our systems? Is there
another possibility to simulate a system with 2,3 or more masters?


Thank you very much for your answers.

Note: if the solution it is to use the behaviural simulation, could
you please help my with my problem using this simulation, i have post
it here with the Subject:
XPS behavioral simulation fails: the design is not loaded


Article: 118128
Subject: Re: ModelSim Waveform naming question
From: backhus <nix@nirgends.xyz>
Date: Wed, 18 Apr 2007 08:51:57 +0200
Links: << >>  << T >>  << A >>
motty schrieb:
> I am using ModelSim SE and was wondering if there is a way to make a
> waveform display mnemonics.  I am simulating a state machine and it
> would be convenient to have the waveform display the state name
> instead of the binary/hex of the state.  I looked all over the
> documentation and didn't find anything.
> 
> The module is written in verilog and the states are parameterized.  NC-
> Sim had an easy way to map numerical values to text.  You create the
> mapping and then can apply it to any waveform.  I just haven't found
> an easy way to do this in ModelSim.  It is probably staring me in the
> face!
> 

Hi motty
do you have enumerated types in verilog?
e.g. type fsm_state_type is (start, action1, action2,...,end);

If so, you could use (or assign ) these to a signal that corresponds to 
the state of your FSM. This signal can be displayed in the modelsim wave 
window as readable text.

have a nice simulation
   Eilert

Article: 118129
Subject: Re: OPB To Wishbone Bridge
From: jetmarc@hotmail.com
Date: 18 Apr 2007 02:27:47 -0700
Links: << >>  << T >>  << A >>
Hi Farhan,

Here's how I wired the wishbone ATA controller to the OPB IPIF.  I
hope it helps.

	    ---	OPB2IPIF

		signal		sig_o2i_Clk_o			: std_logic;				-- opb2ipif_0
		signal		sig_o2i_Reset_o			: std_logic;
		signal		sig_o2i_Freeze_o		: std_logic;
		signal		sig_o2i_AddrValid_o		: std_logic;
		signal		sig_o2i_Burst_o			: std_logic;
		signal		sig_o2i_RNW_o			: std_logic;
		signal		sig_o2i_CS_o  			: std_logic_vector(0 to 0);
		signal		sig_o2i_CE_o  			: std_logic_vector(0 to 0);
		signal		sig_o2i_RdCE_o			: std_logic_vector(0 to 0);
		signal		sig_o2i_WrCE_o			: std_logic_vector(0 to 0);
		signal		sig_o2i_Ack_i    		: std_logic;
		signal		sig_o2i_Retry_i    		: std_logic;
		signal		sig_o2i_Error_i  		: std_logic;
		signal		sig_o2i_ToutSup_i		: std_logic;
		signal		sig_o2i_PostedWrInh_i		: std_logic;
		signal		sig_o2i_AddrAck_i		: std_logic;

		signal 		sig_o2i_Addr_o_xil		: std_logic_vector(0 to 31);
		signal		sig_o2i_Data_o_xil		: std_logic_vector(0 to 31);
		signal		sig_o2i_BE_o_xil		: std_logic_vector(0 to  3);
		signal		sig_o2i_Data_i_xil  		: std_logic_vector(0 to 31);

		signal 		sig_o2i_Addr_o			: std_logic_vector(31 downto 0);
		signal		sig_o2i_Data_o			: std_logic_vector(31 downto 0);
		signal		sig_o2i_BE_o			: std_logic_vector( 3 downto 0);
		signal		sig_o2i_Data_i  		: std_logic_vector(31 downto 0);


	    ---	WISHBONE bus

		signal		sig_wb_data_o			: std_logic_vector (31 downto 0);
		signal		sig_wb_data_i			: std_logic_vector (31 downto 0);
	--	signal		sig_wb_addr_o			: std_logic_vector (31 downto 0);
		signal		sig_wb_cyc_o			: std_logic;
		signal		sig_wb_stb_o			: std_logic;
		signal		sig_wb_sel_o			: std_logic_vector ( 3 downto 0);
		signal		sig_wb_we_o			: std_logic;
		signal		sig_wb_ack_i			: std_logic;
		signal		sig_wb_err_i			: std_logic;
		signal		sig_wb_rty_i			: std_logic;

	    ---	Components

		component	edk
			port (

				...

				o2i_Clk_o_pin				: out	std_logic;			-- opb2ipif_0 (for ATAHOST)
				o2i_Reset_o_pin  			: out	std_logic;
				o2i_Freeze_o_pin 			: out	std_logic;
				o2i_Addr_o_pin  			: out	std_logic_vector(0 to 31);
				o2i_AddrValid_o_pin  			: out	std_logic;
				o2i_Data_o_pin   			: out	std_logic_vector(0 to 31);
				o2i_BE_o_pin    			: out	std_logic_vector(0 to 3);
				o2i_Burst_o_pin  			: out	std_logic;
				o2i_RNW_o_pin    			: out	std_logic;
				o2i_CS_o_pin     			: out	std_logic_vector(0 to 0);
				o2i_CE_o_pin     			: out	std_logic_vector(0 to 0);
				o2i_RdCE_o_pin   			: out	std_logic_vector(0 to 0);
				o2i_WrCE_o_pin   			: out	std_logic_vector(0 to 0);
				o2i_Data_i_pin       			: in	std_logic_vector(0 to 31);
				o2i_Ack_i_pin         			: in	std_logic;
				o2i_Retry_i_pin       			: in	std_logic;
				o2i_Error_i_pin       			: in	std_logic;
				o2i_ToutSup_i_pin     			: in	std_logic;
				o2i_PostedWrInh_i_pin 			: in	std_logic;
				o2i_AddrAck_i_pin			: in	std_logic;

				...

			);
		end component;






		-------------------------------------------------------------------
		---				DISK				---
		-------------------------------------------------------------------

	    ---	signals

		signal		sig_disk_irq			: std_logic;				-- disk module requests
INTERRUPT
		signal		sig_disk_dma_req		: std_logic;				-- disk module requests
DMA
		signal		sig_disk_dma_ack		: std_logic;

	    ---	external pin glue

		signal		sig_disk_reset_n		: std_logic;
		signal		sig_disk_dd_i			: std_logic_vector (15 downto 0);
		signal		sig_disk_dd_o			: std_logic_vector (15 downto 0);
		signal		sig_disk_dd_t			: std_logic;
		signal		sig_disk_dd_oe			: std_logic;
		signal		sig_disk_da			: std_logic_vector ( 2 downto 0);
		signal		sig_disk_cs0_n			: std_logic;
		signal		sig_disk_cs1_n			: std_logic;
		signal		sig_disk_dior_n			: std_logic;
		signal		sig_disk_diow_n			: std_logic;
		signal		sig_disk_iordy			: std_logic;
		signal		sig_disk_intrq			: std_logic;
		signal		sig_disk_dmarq			: std_logic;
		signal		sig_disk_dmack_n		: std_logic;

		signal		sig_disk_dasp_n			: std_logic;				-- not used
		signal		sig_disk_pdiag_n		: std_logic;				-- not used

	    ---	core glue

		signal		sig_disk_da_u			: unsigned(2 downto 0);

		signal		sig_wb_addr_disk_u		: unsigned(6 downto 2);
		signal		sig_wb_cs_disk			: std_logic;

	    ---	OCIDEC3 core

		component	atahost_top

			generic (
				ARST_LVL			: std_logic := '0';			-- asynchronous reset level

				TWIDTH				: natural := 8;				-- counter width

				-- PIO mode 0 settings (@100MHz clock)
				PIO_mode0_T1			: natural := 6;				-- 70ns
				PIO_mode0_T2			: natural := 28;			-- 290ns
				PIO_mode0_T4			: natural := 2;				-- 30ns
				PIO_mode0_Teoc			: natural := 23;			-- 240ns ==> T0 - T1 - T2 =
600 - 70 - 290 = 240

				-- Multiword DMA mode 0 settings (@100MHz clock)
				DMA_mode0_Tm			: natural := 4;				-- 50ns
				DMA_mode0_Td			: natural := 21;			-- 215ns
				DMA_mode0_Teoc			: natural := 21				-- 215ns ==> T0 - Td - Tm =
480 - 50 - 215 = 215
			);

			port(

				-- WISHBONE SYSCON signals

				wb_clk_i			: in	std_logic;			-- master clock in
				arst_i				: in	std_logic := '1';		-- asynchronous active low reset
				wb_rst_i			: in	std_logic := '0';		-- synchronous active high
reset

				-- WISHBONE SLAVE signals

				wb_cyc_i			: in	std_logic;			-- valid bus cycle input
				wb_stb_i			: in	std_logic;			-- strobe/core select input
				wb_ack_o			: out	std_logic;			-- strobe acknowledge output
				wb_rty_o			: out	std_logic;			-- retry output
				wb_err_o			: out	std_logic;			-- error output
				wb_adr_i			: in	unsigned(6 downto 2);		-- A6 = '1' ATA devices
selected
				                                              				--       A5 =
'1' CS1- asserted, '0' CS0- asserted
				                                              				--       A4..A2
ATA address lines
				                                              				-- A6 = '0' ATA
controller selected
				wb_dat_i			: in	std_logic_vector(31 downto 0);	-- Databus in
				wb_dat_o			: out	std_logic_vector(31 downto 0);	-- Databus out
				wb_sel_i			: in	std_logic_vector(3 downto 0);	-- Byte select
signals
				wb_we_i				: in	std_logic;				-- Write enable input
				wb_inta_o			: out	std_logic;			-- interrupt request signal IDE0

				-- DMA engine signals

				DMA_req				: out	std_logic;			-- DMA request
				DMA_Ack				: in	std_logic;				-- DMA acknowledge

				-- ATA signals

				resetn_pad_o			: out	std_logic;
				dd_pad_i			: in	std_logic_vector(15 downto 0);
				dd_pad_o			: out	std_logic_vector(15 downto 0);
				dd_padoe_o			: out	std_logic;
				da_pad_o			: out	unsigned(2 downto 0);
				cs0n_pad_o			: out	std_logic;
				cs1n_pad_o			: out	std_logic;

				diorn_pad_o			: out	std_logic;
				diown_pad_o			: out	std_logic;
				iordy_pad_i			: in	std_logic;
				intrq_pad_i			: in	std_logic;

				dmarq_pad_i			: in	std_logic;
				dmackn_pad_o			: out	std_logic;

				debug_pio_sample_indata		: out	std_logic
			);
		end component;

		signal		sig_pio_sample			: std_logic;



	---------------------------------------------------------------------------------------------------
	---												---
	---					EDK - Embedded Submodule				---
	---												---
	---------------------------------------------------------------------------------------------------

	edk_inst		: edk

				port map (

					...

					--- OPB2IPIF

					o2i_Clk_o_pin				=> sig_o2i_Clk_o,
					o2i_Reset_o_pin  			=> sig_o2i_Reset_o,
					o2i_Freeze_o_pin 			=> sig_o2i_Freeze_o,
					o2i_Addr_o_pin  			=> sig_o2i_Addr_o_xil,
					o2i_AddrValid_o_pin  			=> sig_o2i_AddrValid_o,
					o2i_Data_o_pin   			=> sig_o2i_Data_o_xil,
					o2i_BE_o_pin    			=> sig_o2i_BE_o_xil,
					o2i_Burst_o_pin  			=> sig_o2i_Burst_o,
					o2i_RNW_o_pin    			=> sig_o2i_RNW_o,
					o2i_CS_o_pin     			=> sig_o2i_CS_o,
					o2i_CE_o_pin     			=> sig_o2i_CE_o,
					o2i_RdCE_o_pin   			=> sig_o2i_RdCE_o,
					o2i_WrCE_o_pin   			=> sig_o2i_WrCE_o,
					o2i_Data_i_pin       			=> sig_o2i_Data_i_xil,
					o2i_Ack_i_pin         			=> sig_o2i_Ack_i,
					o2i_Retry_i_pin       			=> sig_o2i_Retry_i,
					o2i_Error_i_pin       			=> sig_o2i_Error_i,
					o2i_ToutSup_i_pin     			=> sig_o2i_ToutSup_i,
					o2i_PostedWrInh_i_pin 			=> sig_o2i_PostedWrInh_i,
					o2i_AddrAck_i_pin			=> sig_o2i_AddrAck_i,

					...

				);




	---------------------------------------------------------------------------------------------------
	---												---
	---												---
	---						OPB IPIF to WB					---
	---												---
	---												---
	---------------------------------------------------------------------------------------------------

    ---	Reverse stupid xilinx "big endian" addressing

	o2i_xil1 : for i in 0 to 31 generate
					sig_o2i_Data_i_xil (31-i)		<= sig_o2i_Data_i (i);
					sig_o2i_Data_o (i)			<= sig_o2i_Data_o_xil (31-i);
					sig_o2i_Addr_o (i)			<= sig_o2i_Addr_o_xil (31-i);
			end generate;

	o2i_xil2 : for i in 0 to 3 generate
					sig_o2i_BE_o (i)			<= sig_o2i_BE_o_xil (3-i);
			end generate;

	---------------------------------------------------------------------------------------------------
	---												---
	---												---
	---					HARDDISK - OCIDEC3 from OpenCores			---
	---												---
	---												---
	---------------------------------------------------------------------------------------------------

			sig_disk_dma_ack		<= '0';

    ---	OPB2IPIF -> ATAHOST WISHBONE glue

	sig_wb_cs_disk			<= '1'	when sig_o2i_CS_o(0)='1' AND sig_o2i_Addr_o
(15 downto 8) = x"00"	else '0';

	sig_wb_addr_disk_u		<= unsigned(sig_o2i_Addr_o(6 downto 2));			-- A6
= '1' ATA devices selected
													--       A5 = '1' CS1- asserted, '0' CS0- asserted
													--       A4..A2 ATA address lines
													-- A6 = '0' ATA controller selected

	sig_wb_cyc_o			<= sig_wb_cs_disk;						-- valid bus cycle
	sig_wb_stb_o			<= sig_wb_cs_disk;						-- strobe/core select
	sig_wb_we_o			<= NOT(sig_o2i_RNW_o);						-- Write enable
	sig_wb_sel_o			<= (others=>'1');						-- Byte select signals

	sig_wb_data_o			<= sig_o2i_Data_o;						-- Databus

	sig_o2i_Data_i			<= sig_wb_data_i;						-- Databus

	sig_o2i_Ack_i			<= sig_wb_ack_i;						-- strobe ack
	sig_o2i_Retry_i			<= sig_wb_rty_i;						-- retry
	sig_o2i_Error_i			<= sig_wb_err_i;						-- error

	sig_o2i_PostedWrInh_i		<= '1';
	sig_o2i_ToutSup_i		<= '1';

    ---	ATAHOST -> I/O pads glue

	sig_disk_da			<= std_logic_vector(sig_disk_da_u);
	sig_disk_dd_t			<= NOT(sig_disk_dd_oe);

    ---	Instantiate OCIDEC3 ATAHOST core

	disk_inst		: atahost_top

				generic map (
					ARST_LVL		=> '0',					-- we're going to invert reset

					TWIDTH			=>  8,					-- counter width

					-- PIO mode 0 settings (@100MHz clock)

					PIO_mode0_T1		=>  6,					-- 70ns
					PIO_mode0_T2		=> 28,					-- 290ns
					PIO_mode0_T4		=>  2,					-- 30ns
					PIO_mode0_Teoc		=> 23,					-- 240ns ==> T0 - T1 - T2 = 600 - 70 -
290 = 240

					-- Multiword DMA mode 0 settings (@100MHz clock)

					DMA_mode0_Tm		=>  4,					-- 50ns
					DMA_mode0_Td		=> 21,					-- 215ns
					DMA_mode0_Teoc		=> 21					-- 215ns ==> T0 - Td - Tm = 480 - 50 -
215 = 215
				)

				port map (

					-- WISHBONE SYSCON signals

					wb_clk_i		=> CLK_OPB,				-- master clock in
					arst_i			=> NOT(RST),				-- asynchronous active low reset
					wb_rst_i		=> '0',					-- synchronous active high reset

					-- WISHBONE SLAVE signals

					wb_cyc_i		=> sig_wb_cyc_o,			-- valid bus cycle input
					wb_stb_i		=> sig_wb_stb_o,			-- strobe/core select input
					wb_ack_o		=> sig_wb_ack_i,			-- strobe acknowledge output
					wb_rty_o		=> sig_wb_rty_i,			-- retry output
					wb_err_o		=> sig_wb_err_i,			-- error output

					wb_adr_i		=> sig_wb_addr_disk_u,			-- A6 = '1' ATA devices
selected
													--       A5 = '1' CS1- asserted, '0' CS0- asserted
													--       A4..A2 ATA address lines
													-- A6 = '0' ATA controller selected
					wb_dat_i		=> sig_wb_data_o,			-- Databus in
					wb_dat_o		=> sig_wb_data_i,			-- Databus out
					wb_sel_i		=> sig_wb_sel_o,			-- Byte select signals
					wb_we_i			=> sig_wb_we_o,				-- Write enable input

					wb_inta_o		=> sig_disk_irq,			-- interrupt request signal IDE0

					-- DMA engine signals

					DMA_req			=> sig_disk_dma_req,			-- DMA request
					DMA_Ack			=> sig_disk_dma_ack,			-- DMA acknowledge

					-- ATA signals

					resetn_pad_o		=> sig_disk_reset_n,
					dd_pad_i		=> sig_disk_dd_i,
					dd_pad_o		=> sig_disk_dd_o,
					dd_padoe_o		=> sig_disk_dd_oe,
					da_pad_o		=> sig_disk_da_u,
					cs0n_pad_o		=> sig_disk_cs0_n,
					cs1n_pad_o		=> sig_disk_cs1_n,

					diorn_pad_o		=> sig_disk_dior_n,
					diown_pad_o		=> sig_disk_diow_n,
					iordy_pad_i		=> sig_disk_iordy,
					intrq_pad_i		=> sig_disk_intrq,

					dmarq_pad_i		=> sig_disk_dmarq,
					dmackn_pad_o		=> sig_disk_dmack_n,

					debug_pio_sample_indata	=> sig_pio_sample
				);


    ---	Instantiate external pins

	disk_obuf_reset_n	: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_reset_n,
					O			=> FPGA_DD_RESET_N
				);


	disk_obuf_cs0_n		: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_cs0_n,
					O			=> FPGA_CS0_N
				);

	disk_obuf_cs1_n		: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_cs1_n,
					O			=> FPGA_CS1_N
				);

	disk_obuf_da0_n		: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_da (0),
					O			=> FPGA_DA0
				);

	disk_obuf_da1_n		: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_da (1),
					O			=> FPGA_DA1
				);

	disk_obuf_da2_n		: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_da (2),
					O			=> FPGA_DA2
				);

	disk_iobuf_dd : for i in 0 to 15 generate U1 : IOBUF

				generic map (
					CAPACITANCE		=> "NORMAL",
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_dd_o (i),
					O			=> sig_disk_dd_i (i),
					T			=> sig_disk_dd_t,
					IO			=> FPGA_DD_DD (i)
				);

			end generate;

	disk_obuf_dior_n	: OBUF

				generic map (
					DRIVE			=> 16,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_dior_n,
					O			=> FPGA_DIOR_HDMARDY_HSTB
				);

	disk_obuf_diow_n	: OBUF

				generic map (
					DRIVE			=> 16,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_diow_n,
					O			=> FPGA_DIOW_STOP
				);

	disk_obuf_dmack_n	: OBUF

				generic map (
					DRIVE			=> 12,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "FAST"
				)

				port map (
					I			=> sig_disk_dmack_n,
					O			=> FPGA_DMACK_N
				);

	disk_iobuf_dmarq	: IOBUF

				generic map (
					CAPACITANCE		=> "NORMAL",
					DRIVE			=> 4,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "SLOW"
				)

				port map (
					I			=> '0',
					O			=> sig_disk_dmarq,
					T			=> '1',
					IO			=> FPGA_DMARQ
				);

	disk_iobuf_intrq	: IOBUF

				generic map (
					CAPACITANCE		=> "NORMAL",
					DRIVE			=> 4,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "SLOW"
				)

				port map (
					I			=> '0',
					O			=> sig_disk_intrq,
					T			=> '1',
					IO			=> FPGA_INTRQ
				);

	disk_iobuf_iordy	: IOBUF

				generic map (
					CAPACITANCE		=> "NORMAL",
					DRIVE			=> 4,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "SLOW"
				)

				port map (
					I			=> '0',
					O			=> sig_disk_iordy,
					T			=> '1',
					IO			=> FPGA_IORDY_DDMARDY_DSTB
				);

    ---	Pins outside of the scope of the core

	disk_obuf_csel		: OBUF

				generic map (
					DRIVE			=> 4,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "SLOW"
				)

				port map (
					I			=> '0',
					O			=> FPGA_CSEL
				);


    ---	Pins that are not used at all

	disk_ibuf_dasp_n	: IBUF

				generic map (
					CAPACITANCE		=> "LOW",
					IOSTANDARD		=> "DEFAULT"
				)

				port map (
					I			=> FPGA_DASP_N,
					O			=> sig_disk_dasp_n
				);

	disk_ibuf_pdiag_n	: IBUF

				generic map (
					CAPACITANCE		=> "LOW",
					IOSTANDARD		=> "DEFAULT"
				)

				port map (
					I			=> FPGA_PDIAG_N,
					O			=> sig_disk_pdiag_n
				);


	disk_obuf_sp1		: OBUF

				generic map (
					DRIVE			=> 4,
					IOSTANDARD		=> "DEFAULT",
					SLEW			=> "SLOW"
				)

				port map (
					I			=> '0',
					O			=> DD_SP1
				);

    ---	Pullup/pulldown resistors

	disk_pulldown_dd7	: PULLDOWN
				port map (
					O			=> FPGA_DD_DD (7)			-- ATA7 pg.38: 10k pulldown on DD7 to
detect absence of a device
				);

	disk_pulldown_dmarq	: PULLDOWN
				port map (
					O			=> FPGA_DMARQ				-- ATA7 pg.38: 5k6 pulldown
				);

	disk_pullup_iordy	: PULLUP
				port map (
					O			=> FPGA_IORDY_DDMARDY_DSTB		-- ATA7 pg.38: 4k7 pullup
				);

	disk_pulldown_intrq	: PULLDOWN
				port map (
					O			=> FPGA_INTRQ				-- ATA7 pg.38: 6k2 pulldown -> selects
active-high
				);


Article: 118130
Subject: ISE Smart Ident
From: "mans" <(myname_here)_123456@yahoo.com>
Date: Wed, 18 Apr 2007 09:38:30 GMT
Links: << >>  << T >>  << A >>
Hello,
    Is there any facility in ISE to automatically indent source code? The 
similar technique is available in C/C++ editors and I it is very simple to 
add it to ISE for indenting smartly VHDL and Verilog source codes.

Regards
 



Article: 118131
Subject: Re: ISE Smart Ident
From: Sean Durkin <news_apr07@durkin.de>
Date: Wed, 18 Apr 2007 12:41:59 +0200
Links: << >>  << T >>  << A >>
mans schrieb:
> Hello,
>     Is there any facility in ISE to automatically indent source code? The 
> similar technique is available in C/C++ editors and I it is very simple to 
> add it to ISE for indenting smartly VHDL and Verilog source codes.
Not as far as I know. But you can tell ISE to use an external editor like
Xemcas, Notepad++, Eclipse with the VHDL-plugin... they all have
indentation, syntax highlighting, templates, code folding...

-- 
My email address is only valid until the end of the month.
Try figuring out what the address is going to be after that...

Article: 118132
Subject: Printing problem with Ise 9.1.03i
From: nezhate <mazouz.nezhate@gmail.com>
Date: 18 Apr 2007 04:24:01 -0700
Links: << >>  << T >>  << A >>
Hi all,
I'm using Ise 9.1.03i. when I try to print a code written in Ise text
editor, I get this error:
"Print fails because the default printer has not been selected", and
when the design summary is opened I can see the window "steup printer"
and my default printer is automatically selected.
How to configure printer for ise text editor?
thanks.


Article: 118133
Subject: Compiling a library
From: "mans" <(myname_here)_123456@yahoo.com>
Date: Wed, 18 Apr 2007 11:35:08 GMT
Links: << >>  << T >>  << A >>
Hello,
   I am trying to simulate a VHDL code (using ISE 9) and I am getting the 
following error:

ERROR:Simulator:235 - Package XXX_pkg has not been compiled properly. Please 
recompile package XXX_pkg.


How can I compile a package?

Regards
 



Article: 118134
Subject: Re: ModelSim Waveform naming question
From: Andreas Ehliar <ehliar@lysator.liu.se>
Date: Wed, 18 Apr 2007 11:45:16 +0000 (UTC)
Links: << >>  << T >>  << A >>
On 2007-04-18, Jonathan Bromley <jonathan.bromley@MYCOMPANY.com> wrote:
> On 17 Apr 2007 22:13:52 -0700, motty <mottoblatto@yahoo.com> wrote:
>
>>I am using ModelSim SE and was wondering if there is a way to make a
>>waveform display mnemonics.  I am simulating a state machine and it
>>would be convenient to have the waveform display the state name
>>instead of the binary/hex of the state.  I looked all over the
>>documentation and didn't find anything.
>>
>>The module is written in verilog and the states are parameterized.  NC-
>>Sim had an easy way to map numerical values to text.  You create the
>>mapping and then can apply it to any waveform.  I just haven't found
>>an easy way to do this in ModelSim.  It is probably staring me in the
>>face!
>
> It's not staring you in the face at all - it's a little tricky 
> to find - but check out the online help for the "virtual type"
> and "virtual function" commands, and you'll get what you need.
>
> To answer backhus:  no, you don't have enumerations in Verilog
> (although they do exist in SystemVerilog).

Another possibility that I've seen in some situations is to
set a signal to a certain string in the state machine as in:

always @(posedge clk)
    if(rst) begin
        state_r <= IDLE;
        state_str <= "STATE1";
    end else begin
        case(state_r)
        IDLE:  begin
            state_r <= STATE1;
            state_str <= "STATE1";
        end
        STATE1: begin
            // and so on...
        end
        endcase
    end


Emacs verilog mode seems to have something that does this automatically
for you. See http://www.veripool.com/verilog-mode_veritedium.html#SEC23

/Andreas


Article: 118135
Subject: Re: ModelSim Waveform naming question
From: Jonathan Bromley <jonathan.bromley@MYCOMPANY.com>
Date: Wed, 18 Apr 2007 08:04:06 -0400
Links: << >>  << T >>  << A >>
On 17 Apr 2007 22:13:52 -0700, motty <mottoblatto@yahoo.com> wrote:

>I am using ModelSim SE and was wondering if there is a way to make a
>waveform display mnemonics.  I am simulating a state machine and it
>would be convenient to have the waveform display the state name
>instead of the binary/hex of the state.  I looked all over the
>documentation and didn't find anything.
>
>The module is written in verilog and the states are parameterized.  NC-
>Sim had an easy way to map numerical values to text.  You create the
>mapping and then can apply it to any waveform.  I just haven't found
>an easy way to do this in ModelSim.  It is probably staring me in the
>face!

It's not staring you in the face at all - it's a little tricky 
to find - but check out the online help for the "virtual type"
and "virtual function" commands, and you'll get what you need.

To answer backhus:  no, you don't have enumerations in Verilog
(although they do exist in SystemVerilog).
-- 
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
jonathan.bromley@MYCOMPANY.com
http://www.MYCOMPANY.com

The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.

Article: 118136
Subject: Re: OPB To Wishbone Bridge
From: sheikh.m.farhan@gmail.com
Date: 18 Apr 2007 06:15:32 -0700
Links: << >>  << T >>  << A >>
On Apr 18, 2:27 pm, jetm...@hotmail.com wrote:
> Hi Farhan,
>
> Here's how I wired the wishbone ATA controller to the OPB IPIF.  I
> hope it helps.
>
>             --- OPB2IPIF
>
>                 signal          sig_o2i_Clk_o                   : std_log=
ic;                            -- opb2ipif_0
>                 signal          sig_o2i_Reset_o                 : std_log=
ic;
>                 signal          sig_o2i_Freeze_o                : std_log=
ic;
>                 signal          sig_o2i_AddrValid_o             : std_log=
ic;
>                 signal          sig_o2i_Burst_o                 : std_log=
ic;
>                 signal          sig_o2i_RNW_o                   : std_log=
ic;
>                 signal          sig_o2i_CS_o                    : std_log=
ic_vector(0 to 0);
>                 signal          sig_o2i_CE_o                    : std_log=
ic_vector(0 to 0);
>                 signal          sig_o2i_RdCE_o                  : std_log=
ic_vector(0 to 0);
>                 signal          sig_o2i_WrCE_o                  : std_log=
ic_vector(0 to 0);
>                 signal          sig_o2i_Ack_i                   : std_log=
ic;
>                 signal          sig_o2i_Retry_i                 : std_log=
ic;
>                 signal          sig_o2i_Error_i                 : std_log=
ic;
>                 signal          sig_o2i_ToutSup_i               : std_log=
ic;
>                 signal          sig_o2i_PostedWrInh_i           : std_log=
ic;
>                 signal          sig_o2i_AddrAck_i               : std_log=
ic;
>
>                 signal          sig_o2i_Addr_o_xil              : std_log=
ic_vector(0 to 31);
>                 signal          sig_o2i_Data_o_xil              : std_log=
ic_vector(0 to 31);
>                 signal          sig_o2i_BE_o_xil                : std_log=
ic_vector(0 to  3);
>                 signal          sig_o2i_Data_i_xil              : std_log=
ic_vector(0 to 31);
>
>                 signal          sig_o2i_Addr_o                  : std_log=
ic_vector(31 downto 0);
>                 signal          sig_o2i_Data_o                  : std_log=
ic_vector(31 downto 0);
>                 signal          sig_o2i_BE_o                    : std_log=
ic_vector( 3 downto 0);
>                 signal          sig_o2i_Data_i                  : std_log=
ic_vector(31 downto 0);
>
>             --- WISHBONE bus
>
>                 signal          sig_wb_data_o                   : std_log=
ic_vector (31 downto 0);
>                 signal          sig_wb_data_i                   : std_log=
ic_vector (31 downto 0);
>         --      signal          sig_wb_addr_o                   : std_log=
ic_vector (31 downto 0);
>                 signal          sig_wb_cyc_o                    : std_log=
ic;
>                 signal          sig_wb_stb_o                    : std_log=
ic;
>                 signal          sig_wb_sel_o                    : std_log=
ic_vector ( 3 downto 0);
>                 signal          sig_wb_we_o                     : std_log=
ic;
>                 signal          sig_wb_ack_i                    : std_log=
ic;
>                 signal          sig_wb_err_i                    : std_log=
ic;
>                 signal          sig_wb_rty_i                    : std_log=
ic;
>
>             --- Components
>
>                 component       edk
>                         port (
>
>                                 ...
>
>                                 o2i_Clk_o_pin                           :=
 out   std_logic;                      -- opb2ipif_0 (for ATAHOST)
>                                 o2i_Reset_o_pin                         :=
 out   std_logic;
>                                 o2i_Freeze_o_pin                        :=
 out   std_logic;
>                                 o2i_Addr_o_pin                          :=
 out   std_logic_vector(0 to 31);
>                                 o2i_AddrValid_o_pin                     :=
 out   std_logic;
>                                 o2i_Data_o_pin                          :=
 out   std_logic_vector(0 to 31);
>                                 o2i_BE_o_pin                            :=
 out   std_logic_vector(0 to 3);
>                                 o2i_Burst_o_pin                         :=
 out   std_logic;
>                                 o2i_RNW_o_pin                           :=
 out   std_logic;
>                                 o2i_CS_o_pin                            :=
 out   std_logic_vector(0 to 0);
>                                 o2i_CE_o_pin                            :=
 out   std_logic_vector(0 to 0);
>                                 o2i_RdCE_o_pin                          :=
 out   std_logic_vector(0 to 0);
>                                 o2i_WrCE_o_pin                          :=
 out   std_logic_vector(0 to 0);
>                                 o2i_Data_i_pin                          :=
 in    std_logic_vector(0 to 31);
>                                 o2i_Ack_i_pin                           :=
 in    std_logic;
>                                 o2i_Retry_i_pin                         :=
 in    std_logic;
>                                 o2i_Error_i_pin                         :=
 in    std_logic;
>                                 o2i_ToutSup_i_pin                       :=
 in    std_logic;
>                                 o2i_PostedWrInh_i_pin                   :=
 in    std_logic;
>                                 o2i_AddrAck_i_pin                       :=
 in    std_logic;
>
>                                 ...
>
>                         );
>                 end component;
>
>                 ---------------------------------------------------------=
----------
>                 ---                             DISK                     =
       ---
>                 ---------------------------------------------------------=
----------
>
>             --- signals
>
>                 signal          sig_disk_irq                    : std_log=
ic;                            -- disk module requests
> INTERRUPT
>                 signal          sig_disk_dma_req                : std_log=
ic;                            -- disk module requests
> DMA
>                 signal          sig_disk_dma_ack                : std_log=
ic;
>
>             --- external pin glue
>
>                 signal          sig_disk_reset_n                : std_log=
ic;
>                 signal          sig_disk_dd_i                   : std_log=
ic_vector (15 downto 0);
>                 signal          sig_disk_dd_o                   : std_log=
ic_vector (15 downto 0);
>                 signal          sig_disk_dd_t                   : std_log=
ic;
>                 signal          sig_disk_dd_oe                  : std_log=
ic;
>                 signal          sig_disk_da                     : std_log=
ic_vector ( 2 downto 0);
>                 signal          sig_disk_cs0_n                  : std_log=
ic;
>                 signal          sig_disk_cs1_n                  : std_log=
ic;
>                 signal          sig_disk_dior_n                 : std_log=
ic;
>                 signal          sig_disk_diow_n                 : std_log=
ic;
>                 signal          sig_disk_iordy                  : std_log=
ic;
>                 signal          sig_disk_intrq                  : std_log=
ic;
>                 signal          sig_disk_dmarq                  : std_log=
ic;
>                 signal          sig_disk_dmack_n                : std_log=
ic;
>
>                 signal          sig_disk_dasp_n                 : std_log=
ic;                            -- not used
>                 signal          sig_disk_pdiag_n                : std_log=
ic;                            -- not used
>
>             --- core glue
>
>                 signal          sig_disk_da_u                   : unsigne=
d(2 downto 0);
>
>                 signal          sig_wb_addr_disk_u              : unsigne=
d(6 downto 2);
>                 signal          sig_wb_cs_disk                  : std_log=
ic;
>
>             --- OCIDEC3 core
>
>                 component       atahost_top
>
>                         generic (
>                                 ARST_LVL                        : std_log=
ic :=3D '0';                     -- asynchronous reset level
>
>                                 TWIDTH                          : natural=
 :=3D 8;                         -- counter width
>
>                                 -- PIO mode 0 settings (@100MHz clock)
>                                 PIO_mode0_T1                    : natural=
 :=3D 6;                         -- 70ns
>                                 PIO_mode0_T2                    : natural=
 :=3D 28;                        -- 290ns
>                                 PIO_mode0_T4                    : natural=
 :=3D 2;                         -- 30ns
>                                 PIO_mode0_Teoc                  : natural=
 :=3D 23;                        -- 240ns =3D=3D> T0 - T1 - T2 =3D
> 600 - 70 - 290 =3D 240
>
>                                 -- Multiword DMA mode 0 settings (@100MHz=
 clock)
>                                 DMA_mode0_Tm                    : natural=
 :=3D 4;                         -- 50ns
>                                 DMA_mode0_Td                    : natural=
 :=3D 21;                        -- 215ns
>                                 DMA_mode0_Teoc                  : natural=
 :=3D 21                         -- 215ns =3D=3D> T0 - Td - Tm =3D
> 480 - 50 - 215 =3D 215
>                         );
>
>                         port(
>
>                                 -- WISHBONE SYSCON signals
>
>                                 wb_clk_i                        : in    s=
td_logic;                      -- master clock in
>                                 arst_i                          : in    s=
td_logic :=3D '1';               -- asynchronous active low reset
>                                 wb_rst_i                        : in    s=
td_logic :=3D '0';               -- synchronous active high
> reset
>
>                                 -- WISHBONE SLAVE signals
>
>                                 wb_cyc_i                        : in    s=
td_logic;                      -- valid bus cycle input
>                                 wb_stb_i                        : in    s=
td_logic;                      -- strobe/core select input
>                                 wb_ack_o                        : out   s=
td_logic;                      -- strobe acknowledge output
>                                 wb_rty_o                        : out   s=
td_logic;                      -- retry output
>                                 wb_err_o                        : out   s=
td_logic;                      -- error output
>                                 wb_adr_i                        : in    u=
nsigned(6 downto 2);           -- A6 =3D '1' ATA devices
> selected
>                                                                          =
                               --       A5 =3D
> '1' CS1- asserted, '0' CS0- asserted
>                                                                          =
                               --       A4..A2
> ATA address lines
>                                                                          =
                               -- A6 =3D '0' ATA
> controller selected
>                                 wb_dat_i                        : in    s=
td_logic_vector(31 downto 0);  -- Databus in
>                                 wb_dat_o                        : out   s=
td_logic_vector(31 downto 0);  -- Databus out
>                                 wb_sel_i                        : in    s=
td_logic_vector(3 downto 0);   -- Byte select
> signals
>                                 wb_we_i                         : in    s=
td_logic;                              -- Write enable input
>                                 wb_inta_o                       : out   s=
td_logic;                      -- interrupt request signal IDE0
>
>                                 -- DMA engine signals
>
>                                 DMA_req                         : out   s=
td_logic;                      -- DMA request
>                                 DMA_Ack                         : in    s=
td_logic;                              -- DMA acknowledge
>
>                                 -- ATA signals
>
>                                 resetn_pad_o                    : out   s=
td_logic;
>                                 dd_pad_i                        : in    s=
td_logic_vector(15 downto 0);
>                                 dd_pad_o                        : out   s=
td_logic_vector(15 downto 0);
>                                 dd_padoe_o                      : out   s=
td_logic;
>                                 da_pad_o                        : out   u=
nsigned(2 downto 0);
>                                 cs0n_pad_o                      : out   s=
td_logic;
>                                 cs1n_pad_o                      : out   s=
td_logic;
>
>                                 diorn_pad_o                     : out   s=
td_logic;
>                                 diown_pad_o                     : out   s=
td_logic;
>                                 iordy_pad_i                     : in    s=
td_logic;
>                                 intrq_pad_i                     : in    s=
td_logic;
>
>                                 dmarq_pad_i                     : in    s=
td_logic;
>                                 dmackn_pad_o                    : out   s=
td_logic;
>
>                                 debug_pio_sample_indata         : out   s=
td_logic
>                         );
>                 end component;
>
>                 signal          sig_pio_sample                  : std_log=
ic;
>
>         -----------------------------------------------------------------=
----------=AD------------------------
>         ---                                                              =
                               ---
>         ---                                     EDK - Embedded Submodule =
                               ---
>         ---                                                              =
                               ---
>         -----------------------------------------------------------------=
----------=AD------------------------
>
>         edk_inst                : edk
>
>                                 port map (
>
>                                         ...
>
>                                         --- OPB2IPIF
>
>                                         o2i_Clk_o_pin                    =
       =3D> sig_o2i_Clk_o,
>                                         o2i_Reset_o_pin                  =
       =3D> sig_o2i_Reset_o,
>                                         o2i_Freeze_o_pin                 =
       =3D> sig_o2i_Freeze_o,
>                                         o2i_Addr_o_pin                   =
       =3D> sig_o2i_Addr_o_xil,
>                                         o2i_AddrValid_o_pin              =
       =3D> sig_o2i_AddrValid_o,
>                                         o2i_Data_o_pin                   =
       =3D> sig_o2i_Data_o_xil,
>                                         o2i_BE_o_pin                     =
       =3D> sig_o2i_BE_o_xil,
>                                         o2i_Burst_o_pin                  =
       =3D> sig_o2i_Burst_o,
>                                         o2i_RNW_o_pin                    =
       =3D> sig_o2i_RNW_o,
>                                         o2i_CS_o_pin                     =
       =3D> sig_o2i_CS_o,
>                                         o2i_CE_o_pin                     =
       =3D> sig_o2i_CE_o,
>                                         o2i_RdCE_o_pin                   =
       =3D> sig_o2i_RdCE_o,
>                                         o2i_WrCE_o_pin                   =
       =3D> sig_o2i_WrCE_o,
>                                         o2i_Data_i_pin                   =
       =3D> sig_o2i_Data_i_xil,
>                                         o2i_Ack_i_pin                    =
       =3D> sig_o2i_Ack_i,
>                                         o2i_Retry_i_pin                  =
       =3D> sig_o2i_Retry_i,
>                                         o2i_Error_i_pin                  =
       =3D> sig_o2i_Error_i,
>                                         o2i_ToutSup_i_pin                =
       =3D> sig_o2i_ToutSup_i,
>                                         o2i_PostedWrInh_i_pin            =
       =3D> sig_o2i_PostedWrInh_i,
>                                         o2i_AddrAck_i_pin                =
       =3D> sig_o2i_AddrAck_i,
>
>                                         ...
>
>                                 );
>
>         -----------------------------------------------------------------=
----------=AD------------------------
>         ---                                                              =
                               ---
>         ---                                                              =
                               ---
>         ---                                             OPB IPIF to WB   =
                               ---
>         ---                                                              =
                               ---
>         ---                                                              =
                               ---
>         -----------------------------------------------------------------=
----------=AD------------------------
>
>     --- Reverse stupid xilinx "big endian" addressing
>
>         o2i_xil1 : for i in 0 to 31 generate
>                                         sig_o2i_Data_i_xil (31-i)        =
       <=3D sig_o2i_Data_i (i);
>                                         sig_o2i_Data_o (i)               =
       <=3D sig_o2i_Data_o_xil (31-i);
>                                         sig_o2i_Addr_o (i)               =
       <=3D sig_o2i_Addr_o_xil (31-i);
>                         end generate;
>
>         o2i_xil2 : for i in 0 to 3 generate
>                                         sig_o2i_BE_o (i)                 =
       <=3D sig_o2i_BE_o_xil (3-i);
>                         end generate;
>
>         -----------------------------------------------------------------=
----------=AD------------------------
>         ---                                                              =
                               ---
>         ---                                                              =
                               ---
>         ---                                     HARDDISK - OCIDEC3 from O=
penCores                       ---
>         ---                                                              =
                               ---
>         ---                                                              =
                               ---
>         -----------------------------------------------------------------=
----------=AD------------------------
>
>                         sig_disk_dma_ack                <=3D '0';
>
>     --- OPB2IPIF -> ATAHOST WISHBONE glue
>
>         sig_wb_cs_disk                  <=3D '1'       when sig_o2i_CS_o(=
0)=3D'1' AND sig_o2i_Addr_o
> (15 downto 8) =3D x"00" else '0';
>
>         sig_wb_addr_disk_u              <=3D unsigned(sig_o2i_Addr_o(6 do=
wnto 2));                     -- A6
> =3D '1' ATA devices selected
>                                                                          =
                               --       A5 =3D '1' CS1- asserted, '0' CS0- =
asserted
>                                                                          =
                               --       A4..A2 ATA address lines
>                                                                          =
                               -- A6 =3D '0' ATA controller selected
>
>         sig_wb_cyc_o                    <=3D sig_wb_cs_disk;             =
                              -- valid bus cycle
>         sig_wb_stb_o                    <=3D sig_wb_cs_disk;             =
                              -- strobe/core select
>         sig_wb_we_o                     <=3D NOT(sig_o2i_RNW_o);         =
                                      -- Write enable
>         sig_wb_sel_o                    <=3D (others=3D>'1');            =
                             -- Byte select signals
>
>         sig_wb_data_o                   <=3D sig_o2i_Data_o;             =
                              -- Databus
>
>         sig_o2i_Data_i                  <=3D sig_wb_data_i;              =
                              -- Databus
>
>         sig_o2i_Ack_i                   <=3D sig_wb_ack_i;               =
                              -- strobe ack
>         sig_o2i_Retry_i                 <=3D sig_wb_rty_i;               =
                              -- retry
>         sig_o2i_Error_i                 <=3D sig_wb_err_i;               =
                              -- error
>
>         sig_o2i_PostedWrInh_i           <=3D '1';
>         sig_o2i_ToutSup_i               <=3D '1';
>
>     --- ATAHOST -> I/O pads glue
>
>         sig_disk_da                     <=3D std_logic_vector(sig_disk_da=
_u);
>         sig_disk_dd_t                   <=3D NOT(sig_disk_dd_oe);
>
>     --- Instantiate OCIDEC3 ATAHOST core
>
>         disk_inst               : atahost_top
>
>                                 generic map (
>                                         ARST_LVL                =3D> '0',=
                                      -- we're going to invert reset
>
>                                         TWIDTH                  =3D>  8, =
                                      -- counter width
>
>                                         -- PIO mode 0 settings (@100MHz c=
lock)
>
>                                         PIO_mode0_T1            =3D>  6, =
                                      -- 70ns
>                                         PIO_mode0_T2            =3D> 28, =
                                      -- 290ns
>                                         PIO_mode0_T4            =3D>  2, =
                                      -- 30ns
>                                         PIO_mode0_Teoc          =3D> 23, =
                                      -- 240ns =3D=3D> T0 - T1 - T2 =3D 600=
 - 70 -
> 290 =3D 240
>
>                                         -- Multiword DMA mode 0 settings =
(@100MHz clock)
>
>                                         DMA_mode0_Tm            =3D>  4, =
                                      -- 50ns
>                                         DMA_mode0_Td            =3D> 21, =
                                      -- 215ns
>                                         DMA_mode0_Teoc          =3D> 21  =
                                      -- 215ns =3D=3D> T0 - Td - Tm =3D 480=
 - 50 -
> 215 =3D 215
>                                 )
>
>                                 port map (
>
>                                         -- WISHBONE SYSCON signals
>
>                                         wb_clk_i                =3D> CLK_=
OPB,                          -- master clock in
>                                         arst_i                  =3D> NOT(=
RST),                         -- asynchronous active low reset
>                                         wb_rst_i                =3D> '0',=
                                      -- synchronous active high reset
>
>                                         -- WISHBONE SLAVE signals
>
>                                         wb_cyc_i                =3D> sig_=
wb_cyc_o,                     -- valid bus cycle input
>                                         wb_stb_i                =3D> sig_=
wb_stb_o,                     -- strobe/core select input
>                                         wb_ack_o                =3D> sig_=
wb_ack_i,                     -- strobe acknowledge output
>                                         wb_rty_o                =3D> sig_=
wb_rty_i,                     -- retry output
>                                         wb_err_o                =3D> sig_=
wb_err_i,                     -- error output
>
>                                         wb_adr_i                =3D> sig_=
wb_addr_disk_u,                       -- A6 =3D '1' ATA devices
> selected
>                                                                          =
                               --       A5 =3D '1' CS1- asserted, '0' CS0- =
asserted
>                                                                          =
                               --       A4..A2 ATA address lines
>                                                                          =
                               -- A6 =3D '0' ATA controller selected
>                                         wb_dat_i                =3D> sig_=
wb_data_o,                    -- Databus in
>                                         wb_dat_o                =3D> sig_=
wb_data_i,                    -- Databus out
>                                         wb_sel_i                =3D> sig_=
wb_sel_o,                     -- Byte select signals
>                                         wb_we_i                 =3D> sig_=
wb_we_o,                              -- Write enable input
>
>                                         wb_inta_o               =3D> sig_=
disk_irq,                     -- interrupt request signal IDE0
>
>                                         -- DMA engine signals
>
>                                         DMA_req                 =3D> sig_=
disk_dma_req,                 -- DMA request
>                                         DMA_Ack                 =3D> sig_=
disk_dma_ack,                 -- DMA acknowledge
>
>                                         -- ATA signals
>
>                                         resetn_pad_o            =3D> sig_=
disk_reset_n,
>                                         dd_pad_i                =3D> sig_=
disk_dd_i,
>                                         dd_pad_o                =3D> sig_=
disk_dd_o,
>                                         dd_padoe_o              =3D> sig_=
disk_dd_oe,
>                                         da_pad_o                =3D> sig_=
disk_da_u,
>                                         cs0n_pad_o              =3D> sig_=
disk_cs0_n,
>                                         cs1n_pad_o              =3D> sig_=
disk_cs1_n,
>
>                                         diorn_pad_o             =3D> sig_=
disk_dior_n,
>                                         diown_pad_o             =3D> sig_=
disk_diow_n,
>                                         iordy_pad_i             =3D> sig_=
disk_iordy,
>                                         intrq_pad_i             =3D> sig_=
disk_intrq,
>
>                                         dmarq_pad_i             =3D> sig_=
disk_dmarq,
>                                         dmackn_pad_o            =3D> sig_=
disk_dmack_n,
>
>                                         debug_pio_sample_indata =3D> sig_=
pio_sample
>                                 );
>
>     --- Instantiate external pins
>
>         disk_obuf_reset_n       : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_reset_n,
>                                         O                       =3D> FPGA=
_DD_RESET_N
>                                 );
>
>         disk_obuf_cs0_n         : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_cs0_n,
>                                         O                       =3D> FPGA=
_CS0_N
>                                 );
>
>         disk_obuf_cs1_n         : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_cs1_n,
>                                         O                       =3D> FPGA=
_CS1_N
>                                 );
>
>         disk_obuf_da0_n         : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_da (0),
>                                         O                       =3D> FPGA=
_DA0
>                                 );
>
>         disk_obuf_da1_n         : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_da (1),
>                                         O                       =3D> FPGA=
_DA1
>                                 );
>
>         disk_obuf_da2_n         : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_da (2),
>                                         O                       =3D> FPGA=
_DA2
>                                 );
>
>         disk_iobuf_dd : for i in 0 to 15 generate U1 : IOBUF
>
>                                 generic map (
>                                         CAPACITANCE             =3D> "NOR=
MAL",
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_dd_o (i),
>                                         O                       =3D> sig_=
disk_dd_i (i),
>                                         T                       =3D> sig_=
disk_dd_t,
>                                         IO                      =3D> FPGA=
_DD_DD (i)
>                                 );
>
>                         end generate;
>
>         disk_obuf_dior_n        : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 16,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_dior_n,
>                                         O                       =3D> FPGA=
_DIOR_HDMARDY_HSTB
>                                 );
>
>         disk_obuf_diow_n        : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 16,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_diow_n,
>                                         O                       =3D> FPGA=
_DIOW_STOP
>                                 );
>
>         disk_obuf_dmack_n       : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 12,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "FAS=
T"
>                                 )
>
>                                 port map (
>                                         I                       =3D> sig_=
disk_dmack_n,
>                                         O                       =3D> FPGA=
_DMACK_N
>                                 );
>
>         disk_iobuf_dmarq        : IOBUF
>
>                                 generic map (
>                                         CAPACITANCE             =3D> "NOR=
MAL",
>                                         DRIVE                   =3D> 4,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "SLO=
W"
>                                 )
>
>                                 port map (
>                                         I                       =3D> '0',
>                                         O                       =3D> sig_=
disk_dmarq,
>                                         T                       =3D> '1',
>                                         IO                      =3D> FPGA=
_DMARQ
>                                 );
>
>         disk_iobuf_intrq        : IOBUF
>
>                                 generic map (
>                                         CAPACITANCE             =3D> "NOR=
MAL",
>                                         DRIVE                   =3D> 4,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "SLO=
W"
>                                 )
>
>                                 port map (
>                                         I                       =3D> '0',
>                                         O                       =3D> sig_=
disk_intrq,
>                                         T                       =3D> '1',
>                                         IO                      =3D> FPGA=
_INTRQ
>                                 );
>
>         disk_iobuf_iordy        : IOBUF
>
>                                 generic map (
>                                         CAPACITANCE             =3D> "NOR=
MAL",
>                                         DRIVE                   =3D> 4,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "SLO=
W"
>                                 )
>
>                                 port map (
>                                         I                       =3D> '0',
>                                         O                       =3D> sig_=
disk_iordy,
>                                         T                       =3D> '1',
>                                         IO                      =3D> FPGA=
_IORDY_DDMARDY_DSTB
>                                 );
>
>     --- Pins outside of the scope of the core
>
>         disk_obuf_csel          : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 4,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "SLO=
W"
>                                 )
>
>                                 port map (
>                                         I                       =3D> '0',
>                                         O                       =3D> FPGA=
_CSEL
>                                 );
>
>     --- Pins that are not used at all
>
>         disk_ibuf_dasp_n        : IBUF
>
>                                 generic map (
>                                         CAPACITANCE             =3D> "LOW=
",
>                                         IOSTANDARD              =3D> "DEF=
AULT"
>                                 )
>
>                                 port map (
>                                         I                       =3D> FPGA=
_DASP_N,
>                                         O                       =3D> sig_=
disk_dasp_n
>                                 );
>
>         disk_ibuf_pdiag_n       : IBUF
>
>                                 generic map (
>                                         CAPACITANCE             =3D> "LOW=
",
>                                         IOSTANDARD              =3D> "DEF=
AULT"
>                                 )
>
>                                 port map (
>                                         I                       =3D> FPGA=
_PDIAG_N,
>                                         O                       =3D> sig_=
disk_pdiag_n
>                                 );
>
>         disk_obuf_sp1           : OBUF
>
>                                 generic map (
>                                         DRIVE                   =3D> 4,
>                                         IOSTANDARD              =3D> "DEF=
AULT",
>                                         SLEW                    =3D> "SLO=
W"
>                                 )
>
>                                 port map (
>                                         I                       =3D> '0',
>                                         O                       =3D> DD_S=
P1
>                                 );
>
>     --- Pullup/pulldown resistors
>
>         disk_pulldown_dd7       : PULLDOWN
>                                 port map (
>                                         O                       =3D> FPGA=
_DD_DD (7)                    -- ATA7 pg.38: 10k pulldown on DD7 to
> detect absence of a device
>                                 );
>
>         disk_pulldown_dmarq     : PULLDOWN
>                                 port map (
>                                         O                       =3D> FPGA=
_DMARQ                                -- ATA7 pg.38: 5k6 pulldown
>                                 );
>
>         disk_pullup_iordy       : PULLUP
>                                 port map (
>                                         O                       =3D> FPGA=
_IORDY_DDMARDY_DSTB           -- ATA7 pg.38: 4k7 pullup
>                                 );
>
>         disk_pulldown_intrq     : PULLDOWN
>                                 port map (
>                                         O                       =3D> FPGA=
_INTRQ                                -- ATA7 pg.38: 6k2 pulldown -> selects
> active-high
>                                 );

Thanks Marc,
Well, I am a Verilog guy, will take some time to decipher VHDL code
into Verilog.
Will let you know in case I need more details.

Best Wishes,
Farhan


Article: 118137
Subject: Seeking the solutions of high speed interconnection for the long distance transmission of 3.3v/24MHz signals.
From: "X.Y." <Xieyu1219@gmail.com>
Date: 18 Apr 2007 06:52:33 -0700
Links: << >>  << T >>  << A >>
Seeking the solutions of high speed interconnection for the long
distance transmission of 3.3v/24MHz signals.

We need to connect a CMOS image sensor and a FPGA chip. The distance
between them is approximately 1 meter. The output signal of the sensor
is 3.3v and 24MHz. However, the length of the original cable of it is
only 1 centimeter, so it should be prolonged. If they are connected by
a cable directly, the signal would attenuate greatly which will cause
the system doesn't work. In my opinion, an interconnecting circuit
should be added between the sensor and the FPGA chip to process the
signal before and after the transmission. By now, the methods I have
found are as follows:
1, Using LVDS signal Transceiver and Receiver
The drawback of the method is: there are more than 10 bits signals,
which need many of this kind of chips. It will take too much place in
PCB and it also cost much.
2, Using chips of Serializer and Deserializer.
Both Maxim and National Semiconductor have such chips such as MAX9247
and DS90C241. It is a good method. Unfortunately the solution is fired
by my tutor because these chips are expensive.

My question is whether there are any other solutions? More cheap will
be better. Thanks a lot.


Article: 118138
Subject: Re: Seeking the solutions of high speed interconnection for the long distance transmission of 3.3v/24MHz signals.
From: "Symon" <symon_brewer@hotmail.com>
Date: Wed, 18 Apr 2007 15:12:36 +0100
Links: << >>  << T >>  << A >>
"X.Y." <Xieyu1219@gmail.com> wrote in message 
news:1176904353.399657.160000@p77g2000hsh.googlegroups.com...
> Seeking the solutions of high speed interconnection for the long
> distance transmission of 3.3v/24MHz signals.
>
> We need to connect a CMOS image sensor and a FPGA chip. The distance
> between them is approximately 1 meter. The output signal of the sensor
> is 3.3v and 24MHz. However, the length of the original cable of it is
> only 1 centimeter, so it should be prolonged. If they are connected by
> a cable directly, the signal would attenuate greatly which will cause
> the system doesn't work. In my opinion, an interconnecting circuit
> should be added between the sensor and the FPGA chip to process the
> signal before and after the transmission. More cheap will
> be better. Thanks a lot.
>
Hi XY,
Use a length of ribbon cable. Make every other conductor ground. Use source 
termination on your signals to match the cable impedance in the gnd-sig-gnd 
mode. Make sure you connect all the grounds properly at both ends of the 
cable. It works well for IDE ATA parallel disks up to 133MBytes/second. HTH, 
Syms.
p.s. BTW., ribbon cable makes great speaker wire. It's flat and fits under 
the carpet! 



Article: 118139
Subject: Re: ModelSim Waveform naming question
From: motty <mottoblatto@yahoo.com>
Date: 18 Apr 2007 07:21:20 -0700
Links: << >>  << T >>  << A >>
Thanks for the replies.  Jonathan, that did the trick.  Hmmm, seems a
bit more involved than with NC-Sim.  But ModelSim seems to be the
better simulator for us...at least with respects the FPGA/Xilinx
simulation.


Article: 118140
Subject: Re: 80000 Bit Shift Register
From: Eli Hughes <emh203@psu.edu>
Date: Wed, 18 Apr 2007 11:37:38 -0400
Links: << >>  << T >>  << A >>
Here is working (Actually Implement in Silicon) code:


module Delay(Clk, DataIn, DataOut);

input Clk;
input DataIn;
output DataOut;

reg  BitRAM [0:950000];
reg  ShiftOutput;

reg [24:0] InAddress;
reg [24:0] OutAddress;

reg [9:0] ClkDiv;
reg LocalClk;

reg Cycle;


always @(posedge Clk)
begin

	ClkDiv<=ClkDiv+1;
	
	if(ClkDiv==25)
	begin
	
	LocalClk = ~LocalClk;
	ClkDiv<=0;
	
	end

end


always @(posedge LocalClk)
begin
	Cycle = ~Cycle;
end

assign DataOut= ShiftOutput;

//Calculate the addresses of the last and first bit of the shift register
always @(posedge LocalClk)
begin

	if(Cycle == 1)
	begin
		InAddress <= InAddress + 1;	
		if(InAddress == 950000)
			begin
			InAddress <=0;
			end
	end
	
end

always @(posedge LocalClk)
begin

	if(Cycle == 0)
	begin
	
		OutAddress <= InAddress + 1;	
		if(OutAddress == 950000)
			begin
			OutAddress <=0;
			end
	end

end



//Implement a Large Circular Buffer
always @(posedge LocalClk)
begin

	if(Cycle == 0)
		ShiftOutput<=BitRAM[OutAddress];
		
end



//Implement a Large Circular Buffer
always @(posedge LocalClk)
	begin
		if(Cycle == 1)
			BitRAM[InAddress] <= DataIn;
	end

endmodule



Article: 118141
Subject: Re: BFM simulation and number of Masters?
From: "Mike Lewis" <someone@micrsoft.com>
Date: Wed, 18 Apr 2007 11:51:45 -0400
Links: << >>  << T >>  << A >>

"ferorcue" <le_marq@hotmail.com> wrote in message 
news:1176876732.441142.274040@b75g2000hsg.googlegroups.com...
> Hello,
>
> First of all I will make my question: Could you please say me  how
> many Masters can be connected to the Bus when the BFM simulation is
> been used?
>
> I created a coprocessor for the embedded PowerPC, and two files to
> implement a bridge between the PLB Bus and the Bus of my coprocessor
> ( small bus called On Chip Bus).
> I have a Master which is able to read all the operations from a txt
> file. this is my sistem
>
>                           BFM Bus
> file.txt --> Master_1 -->|
>                                 |
>                                 |-->bridge_plb2ocb
>                                 |
> coprocessor(bus on chip bus ocb)
>                                 |-->bridge_ocb2plb
>                                 |
>                 Register<--|
>
> I am using the BFM simulation because I got always problems with the
> behavioural simulation( i have a problem that i posted here and i do
> not have the solution yet(
> http://groups.google.com/group/comp.arch.fpga/browse_thread/thread/c4be67a12afae957/1098d98a5af6caf8?lnk=gst&q=ferorcue&rnum=2&hl=en#1098d98a5af6caf8
> ))
>
>
> The point is that Master_1 and bridge_ocb2plb are both masters and the
> system it is not working. Only the master that is mapped in the memory
> address 0x00000000 it is working. I checked first with Master_1 mapped
> in 0x0, and later with bridge_ocb2plb mapped in 0x0, and the bus of
> the BFM simulation only answer or hear the request of one of both
> masters, the one which is mapped in the 0x0.
>
> I think that you have more experience with embedded systems, do you
> think that what i am writing here make sense? It is possible that the
> BFM simulation only allow to have one Master in our systems? Is there
> another possibility to simulate a system with 2,3 or more masters?
>
>
> Thank you very much for your answers.
>
> Note: if the solution it is to use the behaviural simulation, could
> you please help my with my problem using this simulation, i have post
> it here with the Subject:
> XPS behavioral simulation fails: the design is not loaded
>

In general, a bus structure will support multiple masters. You will require 
some arbitration logic and some muxing logic to mux the winning master onto 
the bus. Does the bus protocol you are using support arbitartion 
(request/grant sort of thing)?

Mike 



Article: 118142
Subject: Re: Seeking the solutions of high speed interconnection for the long
From: Eli Hughes <emh203@psu.edu>
Date: Wed, 18 Apr 2007 12:00:06 -0400
Links: << >>  << T >>  << A >>
Symon wrote:
> "X.Y." <Xieyu1219@gmail.com> wrote in message 
> news:1176904353.399657.160000@p77g2000hsh.googlegroups.com...
>> Seeking the solutions of high speed interconnection for the long
>> distance transmission of 3.3v/24MHz signals.
>>
>> We need to connect a CMOS image sensor and a FPGA chip. The distance
>> between them is approximately 1 meter. The output signal of the sensor
>> is 3.3v and 24MHz. However, the length of the original cable of it is
>> only 1 centimeter, so it should be prolonged. If they are connected by
>> a cable directly, the signal would attenuate greatly which will cause
>> the system doesn't work. In my opinion, an interconnecting circuit
>> should be added between the sensor and the FPGA chip to process the
>> signal before and after the transmission. More cheap will
>> be better. Thanks a lot.
>>
> Hi XY,
> Use a length of ribbon cable. Make every other conductor ground. Use source 
> termination on your signals to match the cable impedance in the gnd-sig-gnd 
> mode. Make sure you connect all the grounds properly at both ends of the 
> cable. It works well for IDE ATA parallel disks up to 133MBytes/second. HTH, 
> Syms.
> p.s. BTW., ribbon cable makes great speaker wire. It's flat and fits under 
> the carpet! 
> 
> 

Great idea about the speaker wire!  I'll have to try that next time


-Eli
[Someone who hasn't been into that low cost wire adds 'distortion']

Article: 118143
Subject: Re: Seeking the solutions of high speed interconnection for the long
From: Tim <tim@nooospam.roockyloogic.com>
Date: Wed, 18 Apr 2007 17:11:16 +0100
Links: << >>  << T >>  << A >>
X.Y. wrote:
> Seeking the solutions of high speed interconnection for the long
> distance transmission of 3.3v/24MHz signals.
> 
> We need to connect a CMOS image sensor and a FPGA chip. The distance
> between them is approximately 1 meter. The output signal of the sensor
> is 3.3v and 24MHz. However, the length of the original cable of it is
> only 1 centimeter, so it should be prolonged. If they are connected by
> a cable directly, the signal would attenuate greatly which will cause
> the system doesn't work. In my opinion, an interconnecting circuit
> should be added between the sensor and the FPGA chip to process the
> signal before and after the transmission. By now, the methods I have
> found are as follows:
> 1, Using LVDS signal Transceiver and Receiver
> The drawback of the method is: there are more than 10 bits signals,
> which need many of this kind of chips. It will take too much place in
> PCB and it also cost much.
> 2, Using chips of Serializer and Deserializer.
> Both Maxim and National Semiconductor have such chips such as MAX9247
> and DS90C241. It is a good method. Unfortunately the solution is fired
> by my tutor because these chips are expensive.
> 
> My question is whether there are any other solutions? More cheap will
> be better. Thanks a lot.

SERDES chips aren't very expensive. And the (12-bit) Fairchild Semi
FIN12AC are very cheap - under $2 each and your tutor can probably get a
couple of free samples.

Article: 118144
Subject: There is something (other) like his?
From: "hokutoi" <nomail@nottt.com>
Date: Wed, 18 Apr 2007 18:13:09 +0200
Links: << >>  << T >>  << A >>
http://www.seventech.it/english/prodotti.php

Jamma platform for gaming with SDK

Thanx



Article: 118145
Subject: Re: Block RAM strange behavior, address off by one
From: "M. Hamed" <mhs000@gmail.com>
Date: 18 Apr 2007 09:23:12 -0700
Links: << >>  << T >>  << A >>
Thank you for all the suggestions. I am led to suspect it's a timing
problem and I will investigate that. The data sheet and the handbook
barely mentions anything about Setup/Hold/Cycle time requirements or
otherwise I am looking in the wrong places.


On Apr 17, 10:21 pm, Newman <newman5...@yahoo.com> wrote:
> On Apr 17, 11:02 pm, Peter Alfke <a...@sbcglobal.net> wrote:
>
>
>
> > A few ideas:
> > Are you sure about the content of the various locations?
> > Could the error have happened when you wrote data into the BRAM?
>
> > When reading, read twicein sequence from the same address. Then you
> > will see whether this is a read pipelining problem, or whether you
> > really are always reading the wrong information.
> > The error has to somewhere in your timing.
>
> > Be a sleuth!
> > Peter Alfke
>
> > On Apr 17, 7:12 pm, Gabor <g...@alacron.com> wrote:
>
> > > On Apr 17, 8:13 pm, "M. Hamed" <mhs...@gmail.com> wrote:
>
> > > > I am getting a strange error with Block RAM on a Spartan 3 FPGA. Every
> > > > time I issue a read, the word at the location previous to the given
> > > > address is read. For example if I'm reading from address 5, the word
> > > > at address 4 is output instead. The data written to the block seems
> > > > correct when I view it in ModelSim so I assume it's something with the
> > > > read.
>
> > > This does seem strange.  Are your writes and reads always made to
> > > sequential memory locations (i.e. 1, 2, 3, ... in order)?  Perhaps the
> > > error is in cycle timing and not address?
>
> > > > Viewing signals at the BRAM input in ModelSim shows the correct
> > > > address at the input of port A and the read clock signal goes high but
> > > > the wrong word appear at the output. ENA is always 1 and WEA is always
> > > > 0. The very most recent Write to this same address (from a different
> > > > port) also shows the correct value being written.
>
> > > > The design works correctly in RTL but this problem only occurs with
> > > > the post-route netlist.
>
> > > > Did anyone encounter a similar problem like this before and can give
> > > > me a hint on what's going on.
>
> > > The only time I've seen something similar was with an old version of
> > > the
> > > BRAM simulation models that needed a slight positive hold time in the
> > > address.  In effect it was the behavioral simulation that incorrectly
> > > gave
> > > the read data on the same clock that the address was presented.  In
> > > fact
> > > BRAM's are registered in the Spartan 3 (and Virtex 2) series, so the
> > > output data should have changed on the following clock cycle.  In the
> > > post-PAR timing simulation, the output changed on the following clock
> > > cycle as expected.
>
> > > > Thank you.- Hide quoted text -
>
> > - Show quoted text -
>
> If you generated the block RAM with coregen, there is an option to
> preload the RAM with a coe file.  You can then simulate the block RAM
> both at the RTL and post P&R level, disable the writes in the code
> and
> see if you read the expected data designated by the coe file at the
> desired addresses.
>
> There are some instances when the RTL does not match the post P&R
> simulation.  i.e. (sensitivity list is incomplete in a combinatorial
> process,
> improper use of blocking assignments and variables)  I don't use the
> later two items
> in synthesizable code, so I don't have much experience with them, but
> then
> again, I never get an RTL vs post P&R simulation mismatch because of
> them.
>
> Hope this helps,
> Newman



Article: 118146
Subject: Re: Block RAM strange behavior, address off by one
From: Peter Alfke <peter@xilinx.com>
Date: 18 Apr 2007 09:37:36 -0700
Links: << >>  << T >>  << A >>
I hope you understand that the BRAM is a synchronous device. When you
read data, you first must apply the address, then you give it a rising
clock edge, and as a result of the clock edge, you get the data that
is stored at the above mentioned address location.
Some people think that the read operation should be just
combinatorial, providing output data when an address is applied. That
is NOT the way the BlockRAM works. It does nothing until you apply a
rising clock edge. From a timing point of view, it behaves like a flip-
flop or register.
Peter Alfke, Xilinx Applications

On Apr 18, 9:23 am, "M. Hamed" <mhs...@gmail.com> wrote:
> Thank you for all the suggestions. I am led to suspect it's a timing
> problem and I will investigate that. The data sheet and the handbook
> barely mentions anything about Setup/Hold/Cycle time requirements or
> otherwise I am looking in the wrong places.
>
> On Apr 17, 10:21 pm, Newman <newman5...@yahoo.com> wrote:
>
> > On Apr 17, 11:02 pm, Peter Alfke <a...@sbcglobal.net> wrote:
>
> > > A few ideas:
> > > Are you sure about the content of the various locations?
> > > Could the error have happened when you wrote data into the BRAM?
>
> > > When reading, read twicein sequence from the same address. Then you
> > > will see whether this is a read pipelining problem, or whether you
> > > really are always reading the wrong information.
> > > The error has to somewhere in your timing.
>
> > > Be a sleuth!
> > > Peter Alfke
>
> > > On Apr 17, 7:12 pm, Gabor <g...@alacron.com> wrote:
>
> > > > On Apr 17, 8:13 pm, "M. Hamed" <mhs...@gmail.com> wrote:
>
> > > > > I am getting a strange error with Block RAM on a Spartan 3 FPGA. Every
> > > > > time I issue a read, the word at the location previous to the given
> > > > > address is read. For example if I'm reading from address 5, the word
> > > > > at address 4 is output instead. The data written to the block seems
> > > > > correct when I view it in ModelSim so I assume it's something with the
> > > > > read.
>
> > > > This does seem strange.  Are your writes and reads always made to
> > > > sequential memory locations (i.e. 1, 2, 3, ... in order)?  Perhaps the
> > > > error is in cycle timing and not address?
>
> > > > > Viewing signals at the BRAM input in ModelSim shows the correct
> > > > > address at the input of port A and the read clock signal goes high but
> > > > > the wrong word appear at the output. ENA is always 1 and WEA is always
> > > > > 0. The very most recent Write to this same address (from a different
> > > > > port) also shows the correct value being written.
>
> > > > > The design works correctly in RTL but this problem only occurs with
> > > > > the post-route netlist.
>
> > > > > Did anyone encounter a similar problem like this before and can give
> > > > > me a hint on what's going on.
>
> > > > The only time I've seen something similar was with an old version of
> > > > the
> > > > BRAM simulation models that needed a slight positive hold time in the
> > > > address.  In effect it was the behavioral simulation that incorrectly
> > > > gave
> > > > the read data on the same clock that the address was presented.  In
> > > > fact
> > > > BRAM's are registered in the Spartan 3 (and Virtex 2) series, so the
> > > > output data should have changed on the following clock cycle.  In the
> > > > post-PAR timing simulation, the output changed on the following clock
> > > > cycle as expected.
>
> > > > > Thank you.- Hide quoted text -
>
> > > - Show quoted text -
>
> > If you generated the block RAM with coregen, there is an option to
> > preload the RAM with a coe file.  You can then simulate the block RAM
> > both at the RTL and post P&R level, disable the writes in the code
> > and
> > see if you read the expected data designated by the coe file at the
> > desired addresses.
>
> > There are some instances when the RTL does not match the post P&R
> > simulation.  i.e. (sensitivity list is incomplete in a combinatorial
> > process,
> > improper use of blocking assignments and variables)  I don't use the
> > later two items
> > in synthesizable code, so I don't have much experience with them, but
> > then
> > again, I never get an RTL vs post P&R simulation mismatch because of
> > them.
>
> > Hope this helps,
> > Newman



Article: 118147
Subject: Issues with the BBD file, using a core generated using ISE coregenerator
From: chakra <narashimanc@gmail.com>
Date: 18 Apr 2007 10:10:40 -0700
Links: << >>  << T >>  << A >>
Hi all,

I have a few issues with how to use the BBD file.
key words ISE 8.2, XPS 8.2, BBD file, CORE Generator

step1. I create a core using coregenerator, generate .ngc (netlist)
file out of it.
step2. I use the core as a submodule in my design .vhd which is Master/
Slave OPB.
step 3. In the system->pcores->mydesign->data/ i create a .bbd file
and put the .ngc file name into it
step 4 In the system->pcores->mydesign-> i create a netlist folder and
put the .ngc (of the generated core) file in it

now when i generate bitstream it gives me error in the Ngdbuild
=============================================================
 here is the error

........................
ERROR:NgdBuild:604 - logical block
   'opb_master_ml300_camera_bridge_0/opb_master_ml300_camera_bridge_0/
user_fifo1
   /block0' with type 'fifo_generator_v3_2' could not be resolved. A
pin name
   misspelling can cause this, a missing edif or ngc file, or the
misspelling of
   a type name. Symbol 'fifo_generator_v3_2' is not supported in
target
   'virtex2p'.
ERROR:NgdBuild:604 - logical block
   'opb_master_ml300_camera_bridge_0/opb_master_ml300_camera_bridge_0/
user_fifo1
   /block1' with type 'fifo_generator_v3_2' could not be resolved. A
pin name
   misspelling can cause this, a missing edif or ngc file, or the
misspelling of
   a type name. Symbol 'fifo_generator_v3_2' is not supported in
target
   'virtex2p'.
.........................
========================================================
here is the contents of the bbd file

#######################
FILES
#######################
fifo_generator_v3_2.ngc
=========================================================

any ideas where i am going wrong. please ask me for more info if you
think the info is not enough.

with warm regards to the design community.
chakra.


Article: 118148
Subject: IOB and DIFFM/DIFFS
From: Will <camwwang@gmail.com>
Date: 18 Apr 2007 10:29:59 -0700
Links: << >>  << T >>  << A >>
Hi,

Just wondering whether somebody could let me know the different
between IOB and DIFFM/DIFFS for Xilinx FPGA.

The following pin assignment constraints were specified in .ucf for
Xilinx XC2V8000 FPGA.
NET RAM1_SnWBYTE(0)         LOC=AM27;
NET RAM1_SnWBYTE(1)         LOC=AM26;
NET RAM1_SnWBYTE(2)         LOC=AP27;
NET RAM1_SnWBYTE(3)         LOC=AP26;

But I got the following error complaining about constaints for
RAM0_SnWBYTE[1] and RAM0_SnWBYTE[2]
Couldn't pass the place and route process, resolved that DIFFM
RAM0_SnWBYTE[1] is restricted such that it may not be placed in a IOB.
Couldn't pass the place and route process, resolved that DIFFM
RAM0_SnWBYTE[2] is restricted such that it may not be placed in a IOB.

Any idea why this happened?

Cheers,

-William


Article: 118149
Subject: Problems in simulation (Webpack 9.1.03i)
From: Thomas Heller <theller@python.net>
Date: Wed, 18 Apr 2007 19:40:11 +0200
Links: << >>  << T >>  << A >>
Finally I got simulation of logicores in webpack 9.1.03i to work with the ISE simulator.
However, these messages appear in the transcript window:

Running Fuse ...
WARNING:HDLParsers:3583 - File "K:/IP2_J.2/env/Databases/ip/export/rtf/vhdl/src/XilinxCoreLib/div_gen_v1_0.vhd" which file "C:/Xilinx91i/theller/mydesign/divider.vhd" depends on is modified, but has not been compiled.  You may need to compile "K:/IP2_J.2/env/Databases/ip/export/rtf/vhdl/src/XilinxCoreLib/div_gen_v1_0.vhd" first.
Compiling vhdl file "C:/Xilinx91i/theller/mydesign/detector.vhd" in Library work.
Entity <detector> compiled.
Entity <detector> (Architecture <behavioral>) compiled.
WARNING:HDLParsers:3583 - File "K:/IP2_J.2/env/Databases/ip/export/rtf/vhdl/src/XilinxCoreLib/div_gen_v1_0.vhd" which file "C:/Xilinx91i/theller/mydesign/divider.vhd" depends on is modified, but has not been compiled.  You may need to compile "K:/IP2_J.2/env/Databases/ip/export/rtf/vhdl/src/XilinxCoreLib/div_gen_v1_0.vhd" first.
WARNING:HDLParsers:3583 - File "C:/Xilinx91i/vhdl/src/ieee/std_logic_arith.vhd" which file "C:/Xilinx91i/vhdl/src/ieee/std_logic_unsigned.vhd" depends on is modified, but has not been compiled.  You may need to compile "C:/Xilinx91i/vhdl/src/ieee/std_logic_arith.vhd" first.
WARNING:HDLParsers:3583 - File "C:/Xilinx91i/vhdl/src/ieee/std_logic_unsigned.vhd" which file "C:/Xilinx91i/theller/mydesign/detector.vhd" depends on is modified, but has not been compiled.  You may need to compile "C:/Xilinx91i/vhdl/src/ieee/std_logic_unsigned.vhd" first.
WARNING:HDLParsers:3583 - File "C:/Xilinx91i/vhdl/src/ieee/std_logic_arith.vhd" which file "C:/Xilinx91i/theller/mydesign/detector.vhd" depends on is modified, but has not been compiled.  You may need to compile "C:/Xilinx91i/vhdl/src/ieee/std_logic_arith.vhd" first.
Compiling vhdl file "C:/Xilinx91i/theller/mydesign/detector_tbw.vhw" in Library work.
Entity <detector_tbw> compiled.
Entity <detector_tbw> (Architecture <testbench_arch>) compiled.
Parsing "detector_tbw_beh.prj": 1.84
Codegen   work/detector: 0.00
Codegen   work/detector/Behavioral: 0.41
Codegen   work/detector_tbw: 0.00
Codegen   work/detector_tbw/testbench_arch: 0.34
Building detector_tbw_isim_beh.exe
Running ISim simulation engine ...
This is a Lite version of ISE Simulator.
Simulator is doing circuit initialization process.
Finished circuit initialization process.


Apparently this file "K:/IP2_J.2/env/Databases/ip/export/rtf/vhdl/src/XilinxCoreLib/div_gen_v1_0.vhd" isn't present on my system, it is probably a filename in Xilinx source code.  How can I recompile this file???

Other files like these
"C:/Xilinx91i/vhdl/src/ieee/std_logic_arith.vhd"
"C:/Xilinx91i/vhdl/src/ieee/std_logic_unsigned.vhd"
"C:/Xilinx91i/vhdl/src/ieee/std_logic_arith.vhd"
*are* present on my system, but *I* did not change them.

How can it be that they need to be compiled?  How would I compile them?
Do I have a broken installation?
Or should I not be bothered at all by these messages?

Thanks for any help,
Thomas



Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarAprMayJunJulAugSepOctNovDec2017
2018JanFebMarAprMayJunJulAugSepOctNovDec2018
2019JanFebMarAprMayJunJulAugSepOctNovDec2019
2020JanFebMarAprMay2020

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search