ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.

اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.

اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.

اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.  جهت تبلیغ در وب سایت ECA کلیک کنید.

موضوع: درخواست كد vhdl براي جمع دو فركانس ورودي

1. درخواست كد vhdl براي جمع دو فركانس ورودي

سلام.
لطفا منو در نوشتن يك كد vhdl براي جمع دو فركانس ورودي كه به صورت كلاكند كمك كنيد.  :cry2: :cry2: :cry2:
2. فوري .فوري .سوال؟؟؟

دستوري در vhdl هست كه با اون بشه فركانس كلاك ورودي رو تعيين كرد؟؟؟؟؟ :eek: :question:
3. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي

خوب وقتي كسي جواب نميده،بدون كه نيست
4. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي

دستور خاصی واسه محاسبه فرکانس ورودی ....به نظرم خیلی منطقی نیست که یه دستور استاندار واسه اینکار باشه بهرحال من اطلاعی ندارم اما شما میتونین چند جور فرکانس ورودی رو اندازه بگیرین:

۱.به لحاظ عملی بهتره اینکار رو با یه سیستم خارجی انجام بدین و خروجی اندازگیری رو به FPGA بفرستین
۲. یه تایمر و یه کانتر رو توی FPGA سنتر کنید که فرکانس کلاک وروردی رو اندازه بگیره
۳. یه فرکانس مرجع داشته باشین که میتونین توسط PLL خود FPGA اینو پیاده کنین و بعد از اختلاف بین لبه ها به فرکانس پی ببرید البته در این حالت رنج فرکانس قابل اندازه گیری نباید خیلی دورتر از فرکانس مرجع باشه که توسط PLL داده میشه مثلا فقط ۱۰۰ درصد تلورانس...

برای حالتهای دوم و سوم عوض یه دستور باید یه برنامه بنویسید دستور clck&#039;event یا rising_edge(clk) هم کمک میکنه و دستورات مشابه....
موفق باشین
5. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي

ضمنا از بعد فقط شبیه سازی و شاید هم سنتز بعضی نرم افزارها مثل Quartus یا ISE یا FPGA Advantages و... یه سری ماژولهای آماده دارن....من الان ویندوز در اختیارم نیست ولی خودت چک کن شاید اونا خارج از VHDL استاندارد همچین دستواتی رو فراهم کرده باشن در اون صورت حتما باید کتابخونه شون رو به فایلت اضافه کنی...

-----------------------
اینجا یه پیاده سازی سطح RTL از یه شمارنده فرکانس هست که از روش دومی که گفتم استفاده میکنه خودت باید جک کنی که رنج عملکردش چقدره....
کد:
--

--

-- AUTO-RANGING Single Chip Frequency Counter

--

-- This is a synthesizable model of an autoranging frequency counter.

-- The overall frequency counting coverage is from DC~9.999MHz. There are

-- four ranges, which are &quot;auto&quot; selected:

--

--			frequency 			GATE width

--		 DC-9999Hz,					1  sec

--		 10.00KHz-99.99KHz,			.1  sec

--		 100.0KHz-999.9KHz.			.01 sec

--		 1.000MHz-9.999MHz			.001 sec

--

--

-- Top level chip-interface is as follows:

--

-- Input:

-- 		sys_rs_l		std_logic		asynchronous actuve low reset

--		ref_clk			std_logic		10MHz reference clock input

--		Funknown		std_logic		reference clock input from DC - 10Mhz

--

-- Output

--		gate0_l			std_logic		one&#039;s place 7segment LED common anode gate

--		gate1_l			std_logic		ten&#039;s place 6segment LED common anode gate

--		gate2_l			std_logic		hundred&#039;s place 7segment LED common anode gate

--		gate3_l			std_logic		thousand&#039;s place 6segment LED common anode gate

--

--

--

-- OPERATION

--

-- This frequency counter is based on the premise of counting the incoming unknown

-- frequency&#039;s rising edge for a predetermined fixed amount of time, or GATE.

-- If the counter overflow , then the presently selected GATE is too wide, so the

-- next shortest GATE width is selected. This switching is done immediately, so

-- that no time is wasted in waiting for the GATE to turn off.

-- The measured frequency data is then displayed onto a multiplexed 4 digit 7segment

-- LED display. Since the LED display is refhreshed at 100KHz, a fixed time interval

-- is waited before the next conversion cycle. This gives the display a chance to

-- &quot;update&quot; all the segments.

--

--

-- STATE TRANSITION

--

--      /------\

-- 			 |	   |

--			 |		IDLE

-- 			 |		 |

--			 |	 /-- |

--			 |	 | \ V    overflow=HI

--			 |	 | GATE_ON ----------------&gt; OVERFLOW

--      |  \--/ |              |

-- 			 |		 |              |

--			 |		 | gate_counter=N      |

--      |    |              |

--			 |		 V              |

--			 |	  DISPLAY            |

--			 |		 |              |

--			 |		 |              |

--			 |	 /-- |              |

--			 |	 |	\ V              |

--			 |	 |	DELAY &lt;----------------------/

--			 |	 \--/ |

--			 \-------/

--        gate_counter=N2

--

-- IDLE state

--	This state hold the BCD counter in reset state then transitions

-- into the next state, GATE_ON. The BCD counter must be hold into reset

-- in order not to accumulate from the previous count cycle

--

-- GATE_ON state

-- In this state, the BCD counter is allowed to start counting by asserting

--	the signal &#039;GATE&#039;. Also, an internal timer is started which times

-- the time for which the GATE should be on for. Go to next state when

-- the timer hits the expected tick count

--

-- DISPLAY state

-- In this state, the 4 digit muxed display is &quot;refreshed&quot;, that is loaded with

-- the new data from the BCD counter

--

-- DELAY state

-- This state simply waits for a fixed delay. This fixed delay is required

-- in order to give the display a chance to cycle through the segment refreshing

--

-- OVERFLOW state

-- This state enters when the BCD counter overflows with the given GATE. This

-- means that the GATE is too long, so the next shortest gate length is chosen

-- and the measurement starts over again.

--

--

--

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE ieee.std_logic_arith.all;

USE ieee.std_logic_unsigned.all;

ENTITY freq_counter IS

PORT (

sys_rst_l	:	IN std_logic;

ref_clk		: 	IN std_logic;

Funknown	: 	IN std_logic;

gate0_l		:	OUT std_logic;

gate1_l		: 	OUT std_logic;

gate2_l		: 	OUT std_logic;

gate3_l		:	OUT std_logic;

digit_out_l	:	OUT std_logic_vector (7 downto 0);

-- debug

d_gate		: 	OUT std_logic;

d_gate_cnt_limit : OUT integer range 0 to 10000000;

d_f_counter_count_out : OUT std_logic_vector (15 downto 0);

d_f_overflow	: OUT std_logic

);

END freq_counter;

ARCHITECTURE FREQ_COUNTER_RTL OF freq_counter IS

-- Declare the 4 digit muxed 7segment LED display DISPLAY

COMPONENT disp4_muxed

PORT ( clk_disp	: IN std_logic;

clk_ref	: IN std_logic;

sys_rst_l	: IN std_logic;

data_in 	: IN std_logic_vector (15 downto 0);

dp_in		: IN std_logic_vector ( 1 downto 0);

load		: IN std_logic;

gate0_l	: OUT std_logic;

gate1_l	: OUT std_logic;

gate2_l	: OUT std_logic;

gate3_l	: OUT std_logic;

digit_out_l: OUT std_logic_vector (7 downto 0)	-- MSB=dp,g,f,.., LSB=a

);

END COMPONENT;

-- Declare the 4 digit BCD counter

COMPONENT bcdcounter4

PORT ( Funknown	:	IN std_logic;

sys_rst_l	:	IN std_logic;

GATE		: 	IN std_logic;

ready		:  OUT std_logic;

data_out	:  OUT std_logic_vector (15 downto 0);

overflow	: 	OUT std_logic

);

END COMPONENT;

CONSTANT HIGH 			:	std_logic := &#039;1&#039;;

CONSTANT LOW				:  std_logic := &#039;0&#039;;

TYPE allowed_states IS (idle, gate_on, display, delay, overflow);

SIGNAL state 				: allowed_states;

SIGNAL display_load		: std_logic;

SIGNAL gate				: std_logic;

SIGNAL f_ready			: std_logic;

SIGNAL f_counter_count_out : std_logic_vector (15 downto 0);

SIGNAL f_overflow			: std_logic;

SIGNAL clk_100Khz			: std_logic;

SIGNAL scaler				: std_logic_vector (2 downto 0);

SIGNAL auto_scale			: std_logic_vector (2 downto 0);

SIGNAL gate_counter 		: integer RANGE 0 TO 10000000; -- 24 bits

SIGNAL GATE_CNT_LIMIT		: integer RANGE 0 TO 10000000;

SIGNAL cnt_ena			: std_logic;

SIGNAL counter_reset		: std_logic;

-- RTL BEGINS HERE

BEGIN

-- debug signals (turn them off if yuo do not need them

-- these were on for helping simulation)

d_gate &lt;= gate;

d_gate_cnt_limit &lt;= gate_cnt_limit;

d_f_counter_count_out &lt;= f_counter_count_out;

d_f_overflow &lt;= f_overflow;

-- Connect the subcomponenet

THE_DISPLAY: disp4_muxed PORT MAP (clk_disp	=&gt;	clk_100Khz,

clk_ref		=&gt; ref_clk,

sys_rst_l  =&gt; sys_rst_l,

data_in		=&gt; f_counter_count_out,

dp_in		=&gt; NOT (auto_scale(1 downto 0)),

gate0_l		=&gt; gate0_l,

gate1_l		=&gt; gate1_l,

gate2_l		=&gt; gate2_l,

gate3_l		=&gt; gate3_l,

digit_out_l =&gt; digit_out_l );

-- COnnect the 4 digit BCD counter

THE_COUNTER: bcdcounter4 PORT MAP	(Funknown	=&gt; Funknown,

sys_rst_l	=&gt; 	counter_reset,

GATE		=&gt; gate,

data_out	=&gt;	f_counter_count_out,

overflow	=&gt; f_overflow );

-- CONTROLLER STATE MACHINE

--

SM: PROCESS (sys_rst_l, ref_clk)

BEGIN

-- on reset clear the world

IF (sys_rst_l=LOW) THEN

state 			&lt;= idle;

scaler 		&lt;= &quot;000&quot;;

auto_scale		&lt;= &quot;000&quot;;

gate      &lt;= LOW;

cnt_ena		&lt;= LOW;

counter_reset &lt;= LOW;	-- reset the fcounter

-- on every rising edge of ref_clk (10MHz)

ELSIF (ref_clk=HIGH and ref_clk&#039;EVENT) THEN

CASE (state) IS

-- IDLE state

-- goto next state

WHEN idle =&gt;

state &lt;= gate_on;

counter_reset &lt;= LOW;	-- reset the fcounter

-- GATE_ON state

-- turn on the &quot;gate&quot; which the BCD counter will count clk pulses

WHEN gate_on =&gt;

counter_reset &lt;= HIGH;

gate	 	&lt;= HIGH;	-- GATE is high

cnt_ena		&lt;= HIGH;	-- GATE counter is enabled

-- if the gate counter reaches the gate time limit, goto next state

IF (gate_counter=GATE_CNT_LIMIT) THEN

gate	&lt;= LOW;		-- turn off gate

cnt_ena &lt;= LOW;		-- turn off gate counter

state 	&lt;= display;

auto_scale &lt;= &quot;000&quot;;

-- if the BCD counter has overflowed, go to overflow state

ELSIF (f_overflow=HIGH) THEN

state  &lt;= overflow;

END IF;

-- DISPLAY state

-- go and &quot;refresh&quot; the display

WHEN display =&gt;

display_load &lt;= HIGH;	-- load the display with the recent BCD counter

state 		 &lt;= delay;

-- DELAY state

-- wait here for a bit, to give the muxed LED display a chance

-- to go through its mux cycle

WHEN delay =&gt;

scaler		 &lt;= &quot;100&quot;;	-- set delay to be just the display delay

cnt_ena		 &lt;= HIGH;	-- enable gate counter

-- when the counter has hit the time limit go to next state

IF (gate_counter=GATE_CNT_LIMIT) THEN

cnt_ena	 &lt;= LOW;	-- turn off gate counter

scaler  &lt;= auto_scale;

state	 &lt;= idle;

END IF;

-- OVERFLOW state

-- when the BCD counter has overflowed with the current gate width,

-- select the next shortest gate (1sec, .1sec, .01sec and .001 sec)

-- and remeasure it.

WHEN overflow =&gt;

CASE (auto_scale) IS

WHEN &quot;000&quot; =&gt; auto_scale &lt;= &quot;001&quot;;

WHEN &quot;001&quot; =&gt; auto_scale &lt;= &quot;010&quot;;

WHEN &quot;010&quot; =&gt; auto_scale &lt;= &quot;011&quot;;

WHEN &quot;011&quot; =&gt; auto_scale &lt;= &quot;011&quot;;

WHEN OTHERS =&gt; NULL;

END CASE;

gate	&lt;= LOW;		-- turn off gate

cnt_ena	&lt;= LOW;

state 	&lt;= delay;

END CASE;

END IF;

END PROCESS SM;

-- GATE WIDTH SELECTOR

-- This process selects the width of the GATE signal, by selecting

-- the ticks which will equal the reference time. The ticks is

-- based on 100nS period (10MHz). IF you&#039;re using a differenct clock, you need to

-- change the below 5 values

PROCESS (scaler)

BEGIN

CASE (scaler) IS

WHEN &quot;000&quot; =&gt;

GATE_CNT_LIMIT &lt;= 10000000;		-- 10 million cycles per GATE of 1  SECOND

WHEN &quot;001&quot; =&gt;

GATE_CNT_LIMIT &lt;= 1000000;		-- 1 million cycles per GATE of .1  SECOND

WHEN &quot;010&quot; =&gt;

GATE_CNT_LIMIT &lt;= 100000;		-- 100K		 cycles per GATE of .01 SECOND

WHEN &quot;011&quot; =&gt;

GATE_CNT_LIMIT &lt;= 10000;		-- 10K		 cycles per GATE of .001 SECOND

WHEN &quot;100&quot; =&gt;

GATE_CNT_LIMIT &lt;= 50000;		-- 50000 a bit of delay, for LED mux disp refresh

WHEN OTHERS =&gt;

NULL;

END CASE;

END PROCESS;

-- TIMER

-- This timer is enabled when &quot;ent_ena&quot; signal is asserted.

-- Synchronous to the 10MHZ clock, on the rising edge

PROCESS (cnt_ena, ref_clk )

BEGIN

IF (cnt_ena=LOW) THEN

gate_counter &lt;= 0;

ELSIF (ref_clk=HIGH and ref_clk&#039;EVENT) THEN

gate_counter &lt;= gate_counter + 1;

END IF;

END PROCESS;

-- 100KHz clock generator

-- This is a divider which gnerates 100KHz clock from the 10MHz clock in

-- The 100KHz clock is used on the LED display segment refreshing

PROCESS (sys_rst_l, ref_clk)

VARIABLE counter  : INTEGER range 0 TO 50;

BEGIN

IF (sys_rst_l=&#039;0&#039;) THEN	-- active low, asynchronous reset

clk_100KHZ &lt;= &#039;0&#039;;

counter := 0;

ELSIF (ref_clk=&#039;1&#039; AND ref_clk&#039;EVENT) THEN		-- toggle at 50 ticks of 100nS

IF (counter=50) THEN

clk_100KHZ &lt;= NOT clk_100KHZ;

counter := 0;

ELSE

counter := counter + 1;

END IF;

END IF;

END PROCESS;

END FREQ_COUNTER_RTL;
6. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي

http://www.cmosexod.com/freqcntr.htm
7. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي

سلام دوست عزيز
ممنون از لطف شما، استفاده كردم،برنامه اي كه در متن شماست در خط 184 ، error ميدهد:در قسمت زير:

dp_in =&gt; NOT (auto_scale(1 downto 0)),

اگر ممكنه بگوييد چطور اصلاحش كنم؟؟؟

در ضمن شماتيك مدار براي جمع 2 فركانس ورودي را در ادرس زير قرار دادم.با MAX PLUS طراحي شده.
اگر ممكنه بگوييد چطور اصلاحش كنم؟؟؟

باز هم از تشكر از شما :smile:
8. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي نوشته اصلی توسط sadid
http://www.cmosexod.com/freqcntr.htm

salam
man mikhastam vhdl ro khobe khob yad begiram , bayad az koja shoro konam ???
file amozeshi sefidgaran ro khondam , dar hal hazer ham daram ketab &quot;zamari ro mikhonam .
mishe ye komak bedid .
kheyli sar dar gom shodam
mer30&quot;
9. پاسخ : درخواست كد vhdl براي جمع دو فركانس ورودي

سلام
من كتاب طراحي خودكار مدارات ديجيتال تأليف حسين صباغيان بيدگلي رو پيشنهاد ميكنم
موفق باشيد

کلمات کلیدی این موضوع

vhdl براي جمع درخواست دو فركانس كد ورودي مجوز های ارسال و ویرایش

• شما نمیتوانید موضوع جدیدی ارسال کنید
• شما امکان ارسال پاسخ را ندارید
• شما نمیتوانید فایل پیوست کنید.
• شما نمیتوانید پست های خود را ویرایش کنید
•