8 bit programmeerbare teller met Synchro Synchro verdelen?

A

alphi

Guest
mijn project moet een 8 bit teller met programmeerbare Synchro Synchro verdelen.wanneer OPT = 00, 1 CLK stijgen, counter 1wanneer OPT = 01, 2 CLK stijgen, counter 1wanneer OPT = 10, 4 CLK stijgen, counter 1wanneer OPT = 11, 8 CLK stijgen, counter 1
Opmerking: Ik kan geen gebruik maken clk de frequentie circuit verdelen multiplexer circuit te genereren clk2 te delen, dan clk2 gebruiken voor 8bit Synchro counter.because deze zal genereren grote vertraging betwwen teller uitgang met CLK.my project T1 (counter-uitgang)-T2 ( CLK) <8ns, dus ik gebruik volgende methode VHDL.but het consumeren zeer grote bron van mijn XC9536XL-10.Waarom het consumeren zo groot bron? Hoe kan ik te verbeteren.mijn VHDL:

entiteit ASS is
port (
CLK: in std_logic;
A: out std_logic_vector (7 Downto 0);
OPT: in std_logic_vector (1 Downto 0);
nRST: in std_logic --
)
einde ASS;

architectuur Behavioral van ASS is
signaal A_SIG: std_logic_vector (10 Downto 0); --
beginnen
ACOUNT: block
beginnen
A <= A_SIG (10 Downto 3);
proces (CLK, nRST)
beginnen
indien nRST = '1 'then --
indien CLK = '1 'en vervolgens CLK'event
OPT geval is
wanneer "00" =>
A_SIG (10 Downto 3) <= A_SIG (10 Downto 3) 1;
wanneer "01" =>
A_SIG (10 Downto 2) <= A_SIG (10 Downto 2) 1;
wanneer "10" =>
A_SIG (10 Downto 1) <= A_SIG (10 Downto 1) 1;
wanneer "11" =>
A_SIG (10 Downto 0) <= A_SIG (10 Downto 0) 1;
wanneer anderen =>
null;
einde geval;
end if;
anders
A_SIG <= "00000000000";
end if;
einde proces
einde blok ACOUNT;
einde Behavioral;HDL Synthesis ReportMacro Statistieken
# Toevoegingen / Subtractors: 4
11-bits opteller: 1
10-bits opteller: 1
9-bits opteller: 1
8-bit opteller: 1
Registers #: 11
1-bit register: 11
# Multiplexers: 10
2-tegen-1 multiplexer: 1
1-bit 4-tegen-1 multiplexer: 9

 
Ik kan niet goed begrijpen uw zin, en bezorgdheid over "genereren grote vertraging".

Ik weet niet VHDL erg goed, maar je code lijkt onhandig.Misschien Verilog voorbeeld zal u helpen:
Code:

module top (CLK, A, OPT, nRST);

input CLK, nRST;

input [1:0] OPT;

reg [10:0] count;

output [7:0] A;toewijzen A = aantal>> 3;altijd @ (posedge CLK of negedge nRST) beginnen

if (nRST == 0)

count <= 0;

anders

count <= count (8>> OPT);

eindigen

endmodule
 
Check this out!

Code:

entiteit ASS is

port (

CLK: in std_logic;

A: out std_logic_vector (7 Downto 0);

OPT: in std_logic_vector (1 Downto 0);

nRST: in std_logic --

)

einde ASS;architectuur Behavioral van ASS is

signaal A_SIG: std_logic_vector (10 Downto 0); --

variable tmp: std_logic_vector (10 Downto 0);

beginnen

ACOUNT: block

beginnen

A <= A_SIG (10 Downto 3);

proces (CLK, nRST)

beginnen

indien nRST = '0 'dan

A_SIG <= "00000000000", --

elsif CLK = '1 'en vervolgens CLK'event

OPT geval is

wanneer "00" => tmp: = 8;

wanneer "01" => tmp: = 4;

wanneer "10" => tmp: = 2;

wanneer "11" => tmp: = 1;

wanneer anderen => null;

einde geval;

A_SIG (10 Downto 0) <= A_SIG (10 Downto 0) tmp;

end if;

einde proces

einde blok ACOUNT;

einde Behavioral;

 

Welcome to EDABoard.com

Sponsor

Back
Top