Site Home Archive Home FAQ Home How to search the Archive How to Navigate the Archive
Compare FPGA features and resources
Threads starting:
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
Austin Franklin <austin@dar87kroom.com> wrote in message news:ts7f3mcvi2r3e5@corp.supernews.com... > I know this is "controversial" but this kind of crap just really "irks" > me... Indeed. If I recall correctly, I saw something like this when installing the xilinx free tools - was it the XST synthesis tool; or maybe it was the free version of ModelSim? Though what I remember is that the prohibition was on "publishing" any benchmark results, as in posting to usenet; I can't see how emailing results to one person would even be in violation of that assinine license clause. JeffArticle: 35576
> Hand placement leads to wonderful performance, but it leads to > unmaintainable designs. That doesn't match my experience. I'm typically working on designs that run at bleeding-edge speeds. I'm willing to limit my design complexity to something that I'm willing to hand route. Several years ago, I was working on a 3090 design. The data path was hand placed. (That's a no brainer.) I had most of the control logic hand placed. I tried to get the tools to do the rest. It took a long time to not get good results. I found that I could do several iterations of hand placement and trial routing faster than the system could do the automagic placement and routing. Six months ago I was working on a VirtexE. I had a simple design with many LFSRs. Getting out of the SRL16s was the slow part. I had lots of pipeline FFs to make the rest of things easy for the tools. The tools were not smart enough to place the SRL16s near the logic that needed it. (I may have the details wrong but that's the general idea.) I could do the placement by hand in a half hour or so. How long would it have taken me to find a "clean" way to do the job? > One really neat feature is the variable phase shift, which one uses to > verify the eye opening! Oops, I'm sorry, that sounded like marketing....but > I plead that it is still a really neat engineering feature to verify the eye > opening without having to buy a $$$$$$$ instrument. Neat suggestion. Thanks. Note that not only do you avoid the expensive test gear in the lab, but you get to ship the appropriate tool to each customer so you can retest things in the field. Might be handy if there are external cables or strange temperatures. (or you just need a sanity check) -- These are my opinions, not necessarily my employeers. I hate spam.Article: 35577
> As I understand it, the problem is how to interface values that > are computed using the 155 MHz Clock to logic running at the PCI > Clock that is asynchronous to the fast clock. > There are some metastability wizards in this newsgroup that > propably can better explain the possible solutions than I can. Reading a counter running off one clock from another clock is hard/tricky, but you can easily get in trouble without any metastability. Consider when the counter is changing from 000fff to 001000. Suppose it changes just as you are reading it. The clock-out, prop, and setup times on the different bits will be slightly different. So the 1 might get there before some of the bits in the fff part change to 0s. That gives you a wrong answer. It's a valid number but it won't make sense if you compare it to other readings taken before or after. That is you might get a sequence of readings like this: 000e00 000f00 001100 (should be 000fff or 001000) 001100 001200 You could cound in gray code. Not very FPGA friendly. If "all" you want is a counter that's driven by the 155 MHz clock so you can do something like feed it into your NTP server to have a reference that is much more stable than your CPU clock, then I would do something like this: Use the 155 MHz signal to clock a small counter. Ripple counter OK here. Pick a bit on that counter that is slower than half your PCI clock. Run that bit through a synchronizer to get a good/clean signal on the PCI clock domain. Because it is slower than half/clock you will see the high half and each low half of each cycle. Make a small FSM that emits a 1 cycle pulse on each state change. Use that pulse to gate a counter. That's the counter you want to read. Others have already mentioned many of those ideas. Note that there is no need for a DLL running at 155 MHz. (You may need one for other reasons, but it isn't needed here.) -- These are my opinions, not necessarily my employeers. I hate spam.Article: 35578
This is a multi-part message in MIME format. ------=_NextPart_000_000A_01C15235.EAB59E80 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Here is my code: -------------------------------------------------------------------------= ------- -- Specify Libraries. -------------------------------------------------------------------------= ------- library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_signed.all; -------------------------------------------------------------------------= ------- -- Define Entity. -------------------------------------------------------------------------= ------- entity audio_data2 is port ( =20 = -------------------------------------------------------------------------= --- -- Inputs and Outputs = -------------------------------------------------------------------------= --- CLK_64MHz : in std_logic; -- clock 64MHz Data_train : in std_logic; Data_ready : in std_logic; mode : in std_logic_vector(1 downto 0); T_alloc_out : out std_logic_vector(3 downto 0)); =20 end audio_data2;=20 -------------------------------------------------------------------------= ------- -- Define Architecture. -------------------------------------------------------------------------= ------- architecture read of audio_data2 is component alloc_shift PORT ( clock : IN STD_LOGIC ; shiftin : IN STD_LOGIC ; aclr : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); end component; -------------------------------------------------------------------------= ------- -- Constants -------------------------------------------------------------------------= ------- -------------------------------------------------------------------------= ------- -- Types -------------------------------------------------------------------------= ------- type allocation is array (31 downto 0) of std_logic_vector(3 downto 0); = =20 type scalefactor is array (31 downto 0) of std_logic_vector(5 downto 0); type sample is array (31 downto 0) of std_logic_vector(15 downto = 0); -------------------------------------------------------------------------= ------- -- Signals -------------------------------------------------------------------------= ------- signal allocation_ch0 : allocation; signal scalefactor_ch0 : scalefactor; signal temp_sample : sample; signal sample_0_ch0 : sample; signal sample_1_ch0 : sample; signal sample_2_ch0 : sample; signal sample_3_ch0 : sample; signal sample_4_ch0 : sample; signal sample_5_ch0 : sample; signal sample_6_ch0 : sample; signal sample_7_ch0 : sample; signal sample_8_ch0 : sample; signal sample_9_ch0 : sample; signal sample_10_ch0 : sample; signal sample_11_ch0 : sample; signal data : std_logic; signal alloc_buff : std_logic_vector(3 downto 0); signal clr_alloc_shift : std_logic; -------------------------------------------------------------------------= ------- -- Begin Architecture. -------------------------------------------------------------------------= ------- begin -------------------------------------------------------------------------= ------- -- Binding of arithmetic block ports. -------------------------------------------------------------------------= ------- bind_alloc_shift: alloc_shift port map( clock =3D> CLK_64MHz, shiftin =3D> Data_train, aclr =3D> clr_alloc_shift, q =3D> alloc_buff); Get_data: process(CLK_64MHz) variable alloc_sb : integer range 0 to 31 :=3D 0; variable count_4 : integer range 0 to 3 :=3D 0; begin -- process Get_data if (CLK_64MHz'EVENT and CLK_64MHz =3D '1') then -- rising edge if (mode =3D "11") then -- single channel if (count_4 =3D 3) then -- load allocation subband register allocation_ch0(alloc_sb) <=3D alloc_buff; T_alloc_out <=3D alloc_buff; -- temp for testing purposes alloc_sb :=3D alloc_sb + 1; end if; -- load=20 count_4 :=3D count_4 + 1; end if; -- single channel end if; -- rising edge end process Get_data; clr_alloc_shift <=3D '1'; end read;=20 Thanks Andrew "Mike Treseler" <mike.treseler@flukenetworks.com> wrote in message = news:3BC47570.F92EE69F@flukenetworks.com... > Andrew Gray wrote: >=20 > > When I compile the project Maxplus generates the error: > > Warning: Ignored unneccessary INPUT pin 'Data_Train' > >=20 >=20 > Sounds like there is a missing signal=20 > declaration and/or assignment. > Post your code. >=20 > Consider using simulation before synthesis. >=20 > --Mike Treseler ------=_NextPart_000_000A_01C15235.EAB59E80 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=3DContent-Type content=3D"text/html; = charset=3Diso-8859-1"> <META content=3D"MSHTML 5.50.4134.100" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY> <DIV><FONT face=3DArial size=3D2>Here is my code:</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><BR><FONT face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Specify=20 Libraries.<BR>-----------------------------------------------------------= ---------------------<BR>library=20 IEEE;<BR>use IEEE.std_logic_1164.all;<BR>use = IEEE.std_logic_arith.all;<BR>use=20 IEEE.std_logic_unsigned.all;<BR>use = IEEE.std_logic_signed.all;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><BR><FONT face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Define=20 Entity.<BR>--------------------------------------------------------------= ------------------<BR>entity=20 audio_data2 is<BR> port (<BR> =20 <BR> ---------------------------------------------------------------= -------------<BR> --=20 Inputs and=20 Outputs<BR> --------------------------------------------------------= --------------------<BR> CLK_64MHz =20 : in std_logic; -- clock 64MHz<BR> Data_train : = in=20 std_logic;<BR> Data_ready : in=20 std_logic;<BR> mode = : in=20 std_logic_vector(1 downto 0);<BR> T_alloc_out : = out=20 std_logic_vector(3 downto 0));<BR> <BR>end audio_data2; = </FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><BR><FONT=20 face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Define=20 Architecture.<BR>--------------------------------------------------------= ------------------------<BR>architecture=20 read of audio_data2 is</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><BR><FONT=20 face=3DCourier size=3D2>component=20 alloc_shift<BR> PORT<BR> (<BR> clock &nbs= p; :=20 IN STD_LOGIC ;<BR> shiftin : IN STD_LOGIC=20 ;<BR> aclr : IN STD_LOGIC=20 ;<BR> q : OUT=20 STD_LOGIC_VECTOR (3 DOWNTO 0)<BR> );<BR>end component;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Constants<BR>------------------------------------------------------------= --------------------</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Types<BR>----------------------------------------------------------------= ----------------<BR>type=20 allocation is array (31 downto 0) of std_logic_vector(3 = downto=20 0); <BR>type scalefactor is array (31 downto 0) of = std_logic_vector(5=20 downto 0);<BR>type sample is array = (31=20 downto 0) of std_logic_vector(15 downto 0);</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Signals<BR>--------------------------------------------------------------= ------------------<BR>signal=20 allocation_ch0 : allocation;<BR>signal scalefactor_ch0 :=20 scalefactor;<BR>signal temp_sample : sample;<BR>signal = sample_0_ch0 :=20 sample;<BR>signal sample_1_ch0 : sample;<BR>signal = sample_2_ch0 :=20 sample;<BR>signal sample_3_ch0 : sample;<BR>signal = sample_4_ch0 :=20 sample;<BR>signal sample_5_ch0 : sample;<BR>signal = sample_6_ch0 :=20 sample;<BR>signal sample_7_ch0 : sample;<BR>signal = sample_8_ch0 :=20 sample;<BR>signal sample_9_ch0 : sample;<BR>signal = sample_10_ch0 :=20 sample;<BR>signal sample_11_ch0 : sample;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2>signal data : = std_logic;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2>signal alloc_buff : = std_logic_vector(3=20 downto 0);<BR>signal clr_alloc_shift : std_logic;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Begin=20 Architecture.<BR>--------------------------------------------------------= ------------------------<BR>begin</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><BR><FONT=20 face=3DCourier=20 size=3D2>----------------------------------------------------------------= ----------------<BR>--=20 Binding of arithmetic block=20 ports.<BR>---------------------------------------------------------------= -----------------</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2>bind_alloc_shift: = alloc_shift<BR> port=20 map(<BR> clock =3D>=20 CLK_64MHz,<BR> shiftin =3D>=20 Data_train,<BR> aclr =3D>=20 clr_alloc_shift,<BR> q &nbs= p; =3D>=20 alloc_buff);</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><FONT=20 face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><BR><FONT face=3DCourier=20 size=3D2>Get_data: process(CLK_64MHz)</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2>variable alloc_sb : integer = range 0 to 31=20 :=3D 0;<BR>variable count_4 : integer range 0 to 3 :=3D = 0;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2>begin -- process = Get_data</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><BR><FONT=20 face=3DCourier size=3D2>if (CLK_64MHz'EVENT and CLK_64MHz =3D '1') then = -- rising=20 edge</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2> if (mode =3D "11") then -- = single=20 channel</FONT></DIV><FONT face=3DCourier size=3D2> <DIV><FONT face=3DArial></FONT><FONT face=3DArial></FONT><FONT=20 face=3DArial></FONT><BR> if (count_4 =3D 3) then -- load = allocation=20 subband register</DIV> <DIV><FONT face=3DArial></FONT><FONT face=3DArial></FONT><FONT=20 face=3DArial></FONT><BR> =20 allocation_ch0(alloc_sb) <=3D=20 alloc_buff;<BR> T_alloc_out <=3D=20 alloc_buff; -- temp for testing = purposes<BR> =20 alloc_sb :=3D alloc_sb + 1;<BR> end if; -- = load </DIV><FONT=20 face=3DArial></FONT><FONT face=3DArial></FONT><FONT = face=3DArial></FONT><FONT=20 face=3DArial></FONT><FONT face=3DArial></FONT> <DIV><FONT face=3DArial></FONT><BR> count_4 :=3D count_4 +=20 1;<BR> end if; -- single channel<BR>end if; -- rising = edge</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><FONT=20 face=3DArial size=3D2></FONT><FONT face=3DArial = size=3D2></FONT><BR><FONT face=3DCourier=20 size=3D2>end process Get_data;</FONT></DIV> <DIV><FONT face=3DCourier size=3D2></FONT> </DIV> <DIV><FONT face=3DCourier size=3D2>clr_alloc_shift <=3D = '1';<BR></FONT></DIV> <DIV><FONT face=3DCourier size=3D2>end read; </FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Thanks</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Andrew</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>"Mike Treseler" <</FONT><A=20 href=3D"mailto:mike.treseler@flukenetworks.com"><FONT face=3DArial=20 size=3D2>mike.treseler@flukenetworks.com</FONT></A><FONT face=3DArial = size=3D2>>=20 wrote in message </FONT><A = href=3D"news:3BC47570.F92EE69F@flukenetworks.com"><FONT=20 face=3DArial = size=3D2>news:3BC47570.F92EE69F@flukenetworks.com</FONT></A><FONT=20 face=3DArial size=3D2>...</FONT></DIV><FONT face=3DArial size=3D2>> = Andrew Gray=20 wrote:<BR>> <BR>> > When I compile the project Maxplus = generates the=20 error:<BR>> > Warning: Ignored unneccessary INPUT pin = 'Data_Train'<BR>>=20 > <BR>> <BR>> Sounds like there is a missing signal <BR>>=20 declaration and/or assignment.<BR>> Post your code.<BR>> <BR>> = Consider=20 using simulation before synthesis.<BR>> <BR>> = --Mike=20 Treseler</FONT></BODY></HTML> ------=_NextPart_000_000A_01C15235.EAB59E80--Article: 35579
>Just a note on using GSR-not using GSR with synthesis. GSR routing is free, >it is dedicated copper...and can be used for nothing else. If you do NOT >use GSR, and have a reset in your design (as you probably should) you are >using regular routing resources for this possibly very prolific global net. >In order for synthesis to use GSR (at least Synplicity) EVERY flop must be >attached to GSR, or it will use regular routing resources. Thanks for the reminder. How come all the pictures in the Xilinx data sheets telling us where the muxes are and which signals go where don't show the GSR signal? (Am I just missing it?) Is GSR a not-shown input to some mux or is there an extra GSR input on the FF that's not shown? Does GSR get ORed with the set/reset the picture shows? If I trick the tools into using the GSR signal, am I wasting the normal set/reset logic? (Or are the tools smart enough to use them too, if the hardware supports that?) -- These are my opinions, not necessarily my employeers. I hate spam.Article: 35580
Hello, Thank you for your answers. I see that the less recommended solution is using the DLL. As Ray says I might have trouble getting a 155MHz board level clock into the cheap clearly. With all these ideas there is no point to use an external divider if it can be done in VHDL. All the solutions are fine, this is a "free" running counter started and stopped (rarely) by f/w, so I guess Hal and Ray solutions are probably the most adecuated. Maybe I misunderstood something but in Falk and Peter solutions you have to stop the counter every gate pulse and read the count after i.e. 16 cycles. Thank you all. Ulises Hernandez ECS Technology "Ulises Hernandez" <ulisesh@ecs-telecom.removeplease.co.uk.invalid> wrote in message news:1002729750.5264.0.nnrp-08.c2de5a16@news.demon.co.uk... > Hello, > > I am using a Spartan II XC2S200-FG256-5. I have a 33.33MHz PCI clock which I > can use, I have to count an external recovered clock of 155MHz in a 32 bit > counter and set the result in a register and when software requires the > value can read it. > > I would like to connect the 155 MHz clock to an IBUFG and then to a DLL > (CLKDLLHF), divide it by 16 into the DLL and obtain a 9.68 MHz clock which I > can read with my 33.33 MHz clock. > The other possibility is avoiding this "high" frequency using an external > divider by 4 i.e. and get a 38.75 clock to a DLL (CLKDLL) and divide by 2 > i.e. > > Any suggestions? In the Spartan II Datasheets the maximum frequency for a > CLKDLLHF is 180 MHz. Is it too close? My previous experience with Spartan II > DLL is quite good so I trust it, but I would like if someone could give some > idea. > > Thank you in advance. > > Ulises Hernandez > ECS Technology > > > >Article: 35581
This is the sort of case that should be fed directly to synplicity to allow them to improve their tools. If we don't tell them about it how can they fix it! A. "Rick Filipkiewicz" <rick@algor.co.uk> wrote in message news:3BC4C920.7BB7FA99@algor.co.uk... > > > Don Husby wrote: > > > More wacky synthesis results from Synplicity: > > module Cnt56(K, CE, R, Out); > > input K, CE, R; > > output [55:0] Out; > > reg [55:0] Q; > > assign Out= Q; > > always @(posedge K) Q <= R ? 0 : CE ? Q+1 : Q; > > // if (R) Q <= 0; // This doesn't work either > > // else if (CE) Q <= Q+1; > > endmodule > On the specific point you are right in that Synplify doesn't appear to > be using resources efficiently in this case. EspArticle: 35582
Hi there, I have been working on a vhdl design for a Virtex II for a little while now and I would need to implement Dual Port Fifo. Does anyone have such a block, or where I could get one ? Rgds. Philippe.Article: 35583
I'm using Xilinx ISE 4.1i SP1 How do I specify timing constraints for the following design? (I did RTFM, but could not completely understand how to apply it correctly) The path from Reg1_Out to Reg3_In shall not generate an error in the timing report for case 1 and/or case 2 (see below). But PAR should still try to satisfy the timing constraint from Reg2(Clk2) to Reg3(Clk2), which is 8ns, and optimize all delays (also the delay from Reg1_Out to MUX_Sel). +----+ |Reg1| In1 | | (delay ~2.0 ns) o--/---| |--/-----------------+ 5 | | 5 | | /\ | | +----+ | | | | | Clk1 |MUX_Sel |\| +----+ | \ +----+ |Reg2| | \ |Reg3| In2 | | (delay ~2.0 ns) | | (delay ~1.5 ns) | | o--/---| |--/---------------| |--/---------------| |-- 32 | | 32 | | 1 | | | /\ | | / | /\ | +----+ | / +----+ | |/ | | MUX 32-to-1 | Clk2 (TInOut 2.0 ns) Clk2 case 1: Clk2 = not Clk1, period(Clk1) = 8 ns, 50% duty case 2: Clk2 unrelated to Clk1, period(Clk1) = 8ns, period(Clk2) = 6 ns Many thanks for working tips and any hint. Leo Breuss -------------------------------------------------------------------- Leo Breuss Email: lbreuss-nospam@scs.ch Supercomputing Systems AG Phone: +41 1 445 16 09 Technoparkstr. 1 Fax: +41 1 445 16 10 CH-8005 Zürich, Switzerland Web: http://www.scs.ch/Article: 35584
Hi All, I'm using Virilog based on Foundation ISE 3.1i from Xilinx. I have problem with the divide operand as FPGA Express can not accept variable divide (i.e. f= a/b b can not be variable) but only constant. Is there any body met this problem and can help me to solve it so that the number of occupied gates by the divide operand is minimum. ThaoArticle: 35585
Hi all, -->> second try I'm working on an fpga project which should include a 'the keyboard part' of the good old 8279 keyboard/display controller. The design should be sw-compatible to the keyboard part. So the question is : Is there anybody out there who has the vhdl-code available for this device, other then a costly IP-core. Kind regards, Please reply to Rini_van_Dijk@hotmail.comArticle: 35586
Leo Breuss <lbreuss-nospam@scs.ch> wrote in message news:3BC55AE4.424DF7CC@scs.ch... > How do I specify timing constraints for the following design? [circuit snipped] Hi Leo, My approach for this would be: # group clock nets NET clk_1 TNM_NET = clk_1_grp; NET clk_2 TNM_NET = clk_2_grp; # spec single clock domains TIMESPEC TS_clk_1 = PERIOD : clk_1_grp : 8 ns ; TIMESPEC TS_clk_2 = PERIOD : clk_2_grp : 8 ns ; # spec inter clock domains # clk_1 to clk_2 TIMESPEC TS_clk1x_2_clk2x = FROM : clk_1_grp : TO : clk_2_grp : 8 ns ; I'll leave you to worry about the issues when clocks are unrelated in which case, as you implied, the delay is irrelevant (clocks unrelated). If it were me I'd be inclined to clock reg1 with clk_2 but add a "reg0" before it clocked by clk_1, to shift the problem upstream a bit. I assume that the mux select is semistatic and that you have considered the metastability issues in place. Regards, FredArticle: 35587
I am a bit perplexed with the way nets and combinatorial logic is named in LeonardoSpectrum. Nets are named as "nx followed by a number", and similarly with LUT's and combinatorial logic, i.e ix followed by a number". Now if I wish to Lock certain LUT's in a particual CLB location, then I have no clue about which Lut to pick up , since they all look so dumb and clueless themselves. So hpw does one recognise combinatorial logic. To add further to this confusion, each time I re-synthesize my design, Leonardo assigns a new number to those LUT's which I painstakingly identified earlier. Hence my point here is that though Exemplar has a provision to identify registers with reg_, which can be changed by user with this variable called "prepend_dff_inst_name",why is it overlooking this sort of thing for combinatorial logic also. Just a wild idea, I was wondering if we could write a tcl script for this kind of a thing. Please help and advice, Nisreen TaiyebyArticle: 35588
Thanks I found the error. The last line should have read: clr_alloc_shift <= '0'; and not: clr_alloc_shift <= '1'; The asynchronous reset of the shift register is active high. AndrewArticle: 35589
Don Husby <husby_d@yahoo.com> wrote: I dont know that much about verilog, but what I see in your code is (in my opinion :) ) a synchronous reset, which ofcourse can not be fed directly to the asynchronous reset inputs of the flip-flops. Furthermore, we cannot implement such a huge counter with only 56 LUTs. Normally, LUTs are say 4 input memory blocks, in which case we can do any logical function of four inputs and one output. However, the highest bit of the 56-bit counter needs the 55 lower bits in its enable input plus the one used for enabling the actual counter. This is true for all the bits, which increases the number of LUTs signicantly. I would bet that 8-bit counter of the same type would consume about 12 LUTs (without knowing the targer device). So the counter is actually very optimized, its the designer who is not in this case :) Furthermore, counters synthesize very efficiently in todays tools, if used properly (the hdl code is clear). In any commercial product I would advise to construct all counters from smaller counters, say 4-bit counters. It eases the final production testing. cya, juza : (Note that this sort of thing isn't specific to : Synplicity. Leonardo does a lot of wacky things too. : Sadly, Synplicity is probably the better tool.) : You'd think a simple 56-bit counter would be no : problem. The code below should synthesize to : 1 logic level using 56 LUTs, 56 FFs and a carry chain. : Instead, Synplicity adds an extra 57 LUTs and an extra : level of logic. : module Cnt56(K, CE, R, Out); : input K, CE, R; : output [55:0] Out; : reg [55:0] Q; : assign Out= Q; : always @(posedge K) Q <= R ? 0 : CE ? Q+1 : Q; : // if (R) Q <= 0; // This doesn't work either : // else if (CE) Q <= Q+1; : endmoduleArticle: 35590
The designers code was very clear and stated exactly what he wanted ! Maybe synthesis vendors forget that their tools should synthesis out code - we won't code to suit them. Code should be oriented toward fast and efficient simulation where most designer time is spent. I wouldn't change code just to make synthesis work a little better (back to the point about not minding a few extra gates). But i do expect synthesis tools to learn how to implement the code better - as for the architecture - the origional post didn't specify the device (xilinx infered?) so i don't know if an explicit synchronous reset is available - i assume it is - in which case it should have been used. A. P.S. since we started on coding style :? is outlawed in C these days - it should probably so the same way in verilog ! "Lähteenmäki Jussi" <jusa@cc.tut.fi> wrote in message news:9q3saf$hqh$1@news.cc.tut.fi... > Don Husby <husby_d@yahoo.com> wrote: > > I dont know that much about verilog, but what I see in your > code is (in my opinion :) ) a synchronous reset, which ofcourse can > not be fed directly to the asynchronous reset inputs of the flip-flops. > > So the counter is actually very optimized, its the designer who is not > in this case :) Furthermore, counters synthesize very efficiently in > todays tools, if used properly (the hdl code is clear). In any > commercial product I would advise to construct all counters from smaller > counters, say 4-bit counters. It eases the final production testing. > > cya, > juzaArticle: 35591
"Bhaskar Thiagarajan" <bhaskart@my-deja.com> wrote in message news:<9q1sqq$loqqh$1@ID-82263.news.dfncis.de>... > Clock recovery is a very important part of receivers and is discussed pretty > much in every communications text. There are various methods to perform this > function, but some of the common methods are well described (Ray just > described one using PLLs). > If you want to perform this block in real time at that kind of data > rates...FPGAs/ASICs are your only choice. But if you can store a large > amount of data and post process this, you can probably do this on a DSP. > Search for key words like clock recovery, Costas Loop, etc. I doubt if you > will find detailed examples of implementation other than descriptions on how > this is typically done. > -- > Cheers > Bhaskar > Note: I do *not* check the listed email address. > OK. Now I have to ask some question: 1. Where can I find the basic building blocks examples to perform the clock recovery in FPGA? 2. Some texts explain clock recovery for NRZ data, How should I process IQ data to put in a suitable form? 3. I read a text that DPLL is suitable for data rates <10Mbps. Is this true? ThanksArticle: 35592
This is from the Virtex II data book ver. 1.7 (The latest) Frequency Synthesis Table 37: Frequency Synthesis Attribute Min Max CLKFX_MULTIPLY 2 32 CLKFX_DIVIDE 1 32 CLKFX_MULTIPLY = M CLKFX_DIVIDE = D M = 100 is outside of range 2 - 32 In the preliminary spec the ranges were CLKFX_MULTIPLY 2 4096 CLKFX_DIVIDE 1 4096 Hermann Winkler <hermann.winkler@array-electronics.de> wrote in message news:3bc452e4$0$190$4d4ebb8e@read.news.de.uu.net... > I have seen previous discussion concerning frequency synthesis > with DCM. As far as I remember there are restrictions on the > combinations of M/D. M is the multiplication factor and D > is the division factor of the input frequency. > > I am working now on a design for a XCV2 2000 that uses an internal > clock of 100 MHz. This clock is generated by a DCM from an > external clock source of 27 MHz. Therefore, my M/D is 100/27. > > Does the DCM support M/D=100/27 ? > > Hermann Winkler > > >Article: 35593
GSR is a dedicated net into the FF, which is in addition to, and independent of the S/R input you see in the drawings. The signals are essentially OR'd. As others have mentioned, you can't depend on the GSR signal propagating through the whole tree within a clock cycle even if you synchronize it to the clock if your clock is anywhere near what the FPGA is capable of. You need to use GSR to get it to known start state and not allow anything to strat 'moving' until some delay after GSR goes so that you allow multiple clock cycles for GSR to go away. Hal Murray wrote: > >Just a note on using GSR-not using GSR with synthesis. GSR routing is free, > >it is dedicated copper...and can be used for nothing else. If you do NOT > >use GSR, and have a reset in your design (as you probably should) you are > >using regular routing resources for this possibly very prolific global net. > >In order for synthesis to use GSR (at least Synplicity) EVERY flop must be > >attached to GSR, or it will use regular routing resources. > > Thanks for the reminder. > > How come all the pictures in the Xilinx data sheets telling us > where the muxes are and which signals go where don't show the GSR > signal? (Am I just missing it?) > > Is GSR a not-shown input to some mux or is there an extra GSR > input on the FF that's not shown? Does GSR get ORed with the > set/reset the picture shows? If I trick the tools into using > the GSR signal, am I wasting the normal set/reset logic? (Or > are the tools smart enough to use them too, if the hardware > supports that?) > > -- > These are my opinions, not necessarily my employeers. I hate spam. -- --Ray Andraka, P.E. President, the Andraka Consulting Group, Inc. 401/884-7930 Fax 401/884-7950 email ray@andraka.com http://www.andraka.com "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." -Benjamin Franklin, 1759Article: 35594
If you have a global reset in your design, synplicity won't also use the reset input to the FF because it doesn't recognize the global reset as being a hidden dedicated net. I still have not found a satisfactory work around for this. Andrew Brown wrote: > The designers code was very clear and stated exactly what he wanted ! Maybe > synthesis vendors forget that their tools should synthesis out code - we > won't code to suit them. Code should be oriented toward fast and efficient > simulation where most designer time is spent. I wouldn't change code just > to make synthesis work a little better (back to the point about not minding > a few extra gates). But i do expect synthesis tools to learn how to > implement the code better - as for the architecture - the origional post > didn't specify the device (xilinx infered?) so i don't know if an explicit > synchronous reset is available - i assume it is - in which case it should > have been used. > > A. > > P.S. since we started on coding style :? is outlawed in C these days - it > should probably so the same way in verilog ! > > "Lähteenmäki Jussi" <jusa@cc.tut.fi> wrote in message > news:9q3saf$hqh$1@news.cc.tut.fi... > > Don Husby <husby_d@yahoo.com> wrote: > > > > I dont know that much about verilog, but what I see in your > > code is (in my opinion :) ) a synchronous reset, which ofcourse can > > not be fed directly to the asynchronous reset inputs of the flip-flops. > > > > So the counter is actually very optimized, its the designer who is not > > in this case :) Furthermore, counters synthesize very efficiently in > > todays tools, if used properly (the hdl code is clear). In any > > commercial product I would advise to construct all counters from smaller > > counters, say 4-bit counters. It eases the final production testing. > > > > cya, > > juza -- --Ray Andraka, P.E. President, the Andraka Consulting Group, Inc. 401/884-7930 Fax 401/884-7950 email ray@andraka.com http://www.andraka.com "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." -Benjamin Franklin, 1759Article: 35595
You shouldn't have to find a work around. Yes, i know that workarounds are a necessary part of development - unfortunately - but if this has been happening for a while synplicity should note the issue and resolve their problem. I forgot to check to see if the origional poster used th global reset (GSR) which probably shouldn't be used here (it is applied to all logic andnot just a local counter) unless of course the counter is the only logic ! "Ray Andraka" <ray@andraka.com> wrote in message news:3BC5A521.D21FBCB1@andraka.com... > If you have a global reset in your design, synplicity won't also use the reset > input to the FF because it doesn't recognize the global reset as being a hidden > dedicated net. I still have not found a satisfactory work around for this.Article: 35596
On Thu, 11 Oct 2001 13:56:02 GMT, Ray Andraka <ray@andraka.com> wrote: >If you have a global reset in your design, synplicity won't also use the reset >input to the FF because it doesn't recognize the global reset as being a hidden >dedicated net. I still have not found a satisfactory work around for this. Hi Ray, It used to recognise the global reset. This led to a problem with 6.0.0 in that it would remove the redundant reset from the EDIF which in turn meant that it didn't retain the reset value (0 or 1) that you had asked for. The back end tools would substitute the default (0). Bad luck if you wanted 1. AFAIK I was the first user to report this bug (and it took some weeks to convince them that it was a bug). I wonder if the fix in more recent versions of Synplify involved removing the ability to recognise the use of GSR? Regards, Allan. >Andrew Brown wrote: > >> The designers code was very clear and stated exactly what he wanted ! Maybe >> synthesis vendors forget that their tools should synthesis out code - we >> won't code to suit them. Code should be oriented toward fast and efficient >> simulation where most designer time is spent. I wouldn't change code just >> to make synthesis work a little better (back to the point about not minding >> a few extra gates). But i do expect synthesis tools to learn how to >> implement the code better - as for the architecture - the origional post >> didn't specify the device (xilinx infered?) so i don't know if an explicit >> synchronous reset is available - i assume it is - in which case it should >> have been used. >> >> A. >> >> P.S. since we started on coding style :? is outlawed in C these days - it >> should probably so the same way in verilog ! >> >> "Lähteenmäki Jussi" <jusa@cc.tut.fi> wrote in message >> news:9q3saf$hqh$1@news.cc.tut.fi... >> > Don Husby <husby_d@yahoo.com> wrote: >> > >> > I dont know that much about verilog, but what I see in your >> > code is (in my opinion :) ) a synchronous reset, which ofcourse can >> > not be fed directly to the asynchronous reset inputs of the flip-flops. >> > >> > So the counter is actually very optimized, its the designer who is not >> > in this case :) Furthermore, counters synthesize very efficiently in >> > todays tools, if used properly (the hdl code is clear). In any >> > commercial product I would advise to construct all counters from smaller >> > counters, say 4-bit counters. It eases the final production testing. >> > >> > cya, >> > juza > >-- >--Ray Andraka, P.E. >President, the Andraka Consulting Group, Inc. >401/884-7930 Fax 401/884-7950 >email ray@andraka.com >http://www.andraka.com > > "They that give up essential liberty to obtain a little > temporary safety deserve neither liberty nor safety." > -Benjamin Franklin, 1759 > >Article: 35597
All, In careful characterization of the DCM, we decided to limit the M and D values to those that delivered acceptable jitter performance, and could be covered by the production test. I am sure one can appreciate the problem of testing 2E403 frequency/M/D combinations. By limiting the universe to 32, and not allowing any fraction that has not been reduced to its least common denominator, we also reduce the test space to one that is reasonable. One of the big advantages of a pure digital circuit should be that its behavior is always predictable. In order to supply that level of quality, we must sometimes limit the features to those we can stand behind. I apologize to anyone who may have been counting on large M and D values. It was never our intent to mislead anyone, and we would have removed all references to M and D ranges in the preliminary data sheets if we would have caught them in time. As it was, it was something that slipped through the review process, and I hold myself accountable as the chief organizer of the datasheet review for technical accuracy of Virtex II's advanced datasheet. Austin Apllehead wrote: > This is from the Virtex II data book ver. 1.7 (The latest) > Frequency Synthesis > Table 37: Frequency Synthesis > Attribute Min Max > CLKFX_MULTIPLY 2 32 > CLKFX_DIVIDE 1 32 > > CLKFX_MULTIPLY = M > CLKFX_DIVIDE = D > > M = 100 is outside of range 2 - 32 > > In the preliminary spec the ranges were > CLKFX_MULTIPLY 2 4096 > CLKFX_DIVIDE 1 4096 > > Hermann Winkler <hermann.winkler@array-electronics.de> wrote in message > news:3bc452e4$0$190$4d4ebb8e@read.news.de.uu.net... > > I have seen previous discussion concerning frequency synthesis > > with DCM. As far as I remember there are restrictions on the > > combinations of M/D. M is the multiplication factor and D > > is the division factor of the input frequency. > > > > I am working now on a design for a XCV2 2000 that uses an internal > > clock of 100 MHz. This clock is generated by a DCM from an > > external clock source of 27 MHz. Therefore, my M/D is 100/27. > > > > Does the DCM support M/D=100/27 ? > > > > Hermann Winkler > > > > > >Article: 35598
What do you mean by "dual-port FIFO" Most FIFOs are implemented using a dual-port memory, one port for write, the other one for read. Is that what you mean? Peter Alfke ============================ Philippe Robert wrote: > Hi there, > > I have been working on a vhdl design for a Virtex II for a little while now > and I would need to implement Dual Port Fifo. Does anyone have such a block, > or where I could get one ? > > Rgds. > Philippe.Article: 35599
Hi, I have a simulation running using the most recent version of web-pack. I am simulating a DCM using it to generate the 4 quadurature outputs (0, 90, 180, and 270 degrees). Frequency multiplication is 1. I am giving it a 400 MHz clock and the simulation still shows proper signals with no errors on these outputs. In fact, all the outputs seem correct on this part. This is the slower version in the simulation. (I am using the most recent version of the web pack software.) What gives? How do I really simulate this part and get proper results that I can trust? By the way, I am using two DCM's to generate 8 clocks with 45 degree spacing. These clocks are driving 8 counters who's outputs are summed to get an equivalent output with 8 times the resolution of the input clock. Thanks to Peter Alfke for the idea. Here is a section of the input code for the two DCM's attribute DFS_FREQUENCY_MODE : string; attribute CLKFX_DIVIDE : integer; attribute CLKFX_MULTIPLY : integer; attribute STARTUP_WAIT : string; attribute CLKOUT_PHASE_SHIFT : string; attribute PHASE_SHIFT : integer; attribute DFS_FREQUENCY_MODE of DCM_1: label is "LOW"; attribute CLKFX_DIVIDE of DCM_1: label is 1; attribute CLKFX_MULTIPLY of DCM_1: label is 1; attribute CLKOUT_PHASE_SHIFT of DCM_1: label is "FIXED"; attribute STARTUP_WAIT of DCM_1: label is "FALSE"; attribute PHASE_SHIFT of DCM_1: label is 0; attribute DFS_FREQUENCY_MODE of DCM_2: label is "LOW"; attribute CLKFX_DIVIDE of DCM_2: label is 1; attribute CLKFX_MULTIPLY of DCM_2: label is 1; attribute CLKOUT_PHASE_SHIFT of DCM_2: label is "FIXED"; attribute STARTUP_WAIT of DCM_2: label is "FALSE"; attribute PHASE_SHIFT of DCM_2: label is 32; begin DCM_1:DCM port map ( CLKIN => clock, CLKFB => clock0, DSSEN => zero, PSINCDEC => zero, PSEN => zero, PSCLK => zero, RST => rst, CLK0 => clock0, CLK90 => clock90, CLK180 => clock180, CLK270 => clock270, CLK2X => open, CLK2X180 => open, CLKDV => open, CLKFX => open, CLKFX180 => open, LOCKED => open, PSDONE => open, STATUS => open ); DCM_2:DCM port map ( CLKIN => clock, CLKFB => clock45, DSSEN => zero, PSINCDEC => zero, PSEN => zero, PSCLK => zero, RST => rst, CLK0 => clock45, CLK90 => clock135, CLK180 => clock225, CLK270 => clock315, CLK2X => open, CLK2X180 => open, CLKDV => open, CLKFX => open, CLKFX180 => open, LOCKED => open, PSDONE => open, STATUS => open ); Thanks, Theron Hicks
Site Home Archive Home FAQ Home How to search the Archive How to Navigate the Archive
Compare FPGA features and resources
Threads starting:
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