problém při provádění státní mašinérii ve VHDL

S

s3034585

Guest
Ahoj kluci Snažím se realizovat státní stroj ve VHDL.Snažím se jen načíst nějaký posuvných registrů a později přesunout je na pozdější státech.

Mám 4 uvádí, jalový, zátěž, clk_st, počítačové.
V klidovém stavu se snažím reset je v zatížení i zatížení posuvných registrů s novými hodnotami.v clk_st i posun stavu je jednou a vypočítat i vypočítat hodnotu xoring nich a pak je posun.
problém, který jsem čelí, je, že když to jde do stavu přesunout ji posune registruje 2 krát.Nejsem schopen zjistit, proč to excute tohoto stavu 2 krát.

cany někdo, prosím, pomozte ...Já jsem se vážou kód níže ..
díky předem

-------------------------------------------------- ---------------------------------------------
Behaviorální architektura z testu je
-------------------------------------------------- ----------------------------

signál C1, C2, C3: std_logic;Typ State_Type je (Idle, zatížení, clk_st, výpočetní);

signál Current_State, Next_State: State_Type;

-------------------------------------------------- ----------------------------
začít

statereg: proces (CLK, Reset)
začít
pokud reset = '1 'pak
Current_State <= Idle;
elsif (clk'event a CLK = '1 '), pak
Current_State <= Next_State;
end if;
ukončení procesu;procesu (CLK, Current_State, reset)variabilní r1_r: std_logic_vector (18 downto 0);
variabilní r2_r: std_logic_vector (21 downto 0);
variabilní r3_r: std_logic_vector (22 downto 0);
variabilní empty_bit: std_logic;

proměnná CNT: integer;

variabilní cnt_test: integer;

variabilní ref_bit: std_logic_vector (64-1 downto 0);
variabilní shft_reg_r3: std_logic_vector (2 downto 0);
variabilní shft_reg_r3_1: std_logic_vector (1 downto 0);
variabilní shft_reg_r3_2: std_logic;
variabilní shft_reg_r3_3: std_logic_vector (2 downto 0);
začít

případ Current_State je
při nečinnosti =>
r1_r: = (ostatní => '0 ');
r2_r: = (ostatní => '0 ');
r3_r: = (ostatní => '0 ');
CNT: = 0;
empty_bit: = '0 ';
FB1 <= '0 ';
fb2 <= '0 ';
fb3 <= '0 ';
c1 <= '0 ';
c2 <= '0 ';
c3 <= '0 ';
shft_reg_r3: = (ostatní => '0 ');
shft_reg_r3_1: = (ostatní => '0 ');
shft_reg_r3_2: = '0 ';
shft_reg_r3_3: = (ostatní => '0 ');
ref_bit: = (ostatní => '0 ');
cnt_test: = 0;

pokud zatížení = '1 'pak
Next_State <= load_reg;
jiný
Next_State <= nečinný;
end if;

když load_reg =>
Next_State <= clk_st;
ref_bit: = Reference;
r1_r: = Vector_In (63 downto 45);
r2_r: = Vector_In (44 downto 23);
empty_bit: = r1_r (1

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

XOR r2_r (21) xor ref_bit (Ks_Width-1);
shft_reg_r3: = "00" & empty_bit; - 22 bit
shft_reg_r3_1: = '0 '& r3_r (21), - 21 bit
shft_reg_r3_2: = r3_r (20), - 20 bit
shft_reg_r3_3: = "00" & r3_r (7); - 7 bit

CNT: = 1;

když clk_st =>
Next_State <= spočítat;
ref_bit (Ks_Width-1 downto 0): = ref_bit (Ks_Width-2 downto 0) & '0 ';

- "Je to posun ref_bit 2 krát ... Nevím, proč"

cnt_test: = cnt_test 1;
empty_bit: = r1_r (1

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

XOR r2_r (21) xor ref_bit (Ks_Width-1);
shft_reg_r3: = shft_reg_r3 (1 downto 0) & empty_bit; - 22 bit
shft_reg_r3_1: = shft_reg_r3_1 (0) & empty_bit; - 21 bit
shft_reg_r3_3: = shft_reg_r3_3 (1 downto 0) & r3_r (7); - 7 bit
shft_reg_r3_2: = empty_bit; - 20 bit
c1 <= r1_r (

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

;
c2 <= r2_r (10);
c3 <= r3_r (10);
CNT: = 2;když spočítat =>

Next_State <= spočítat;

ref_bit (Ks_Width-1 downto 0): = ref_bit (Ks_Width-2 downto 0) & '0 ';
empty_bit: = r1_r (1

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

XOR r2_r (21) xor ref_bit (Ks_Width-1);
if (c3 = C1), nebo (c3 = c2), pak - 2
shft_reg_r3: = shft_reg_r3 (1 downto 0) & empty_bit; - 22 bit
shft_reg_r3_1: = shft_reg_r3_1 (0) & empty_bit; - 21 bit
shft_reg_r3_3: = shft_reg_r3_3 (1 downto 0) & r3_r (7); - 7 bit
shft_reg_r3_2: = empty_bit; - 20 bit

"Na jedné particuar podmínkou, že bude exit ..."
když ostatní =>
null;
konec případu;

ukončení procesu;

-------------------------------------------------- -----------------------------------------

 
Myslím si, že kód pro clk_st se přesouvá jednou, obdržíte 2 krát řazení, protože v příštím cyklu, ve státě vypočítat, jste přesouvá ještě jednou.

Citace:

vypočítat i vypočítat hodnotu xoring nich a pak je posun
 
Vyjměte hodiny od druhého procesu.To pomůže.
Vzhledem k tomu, každý stát změna je dvě hodiny cyklu.tj. proč se přesouvá dvakrát.

Proveďte proces buď kombinatorické, nebo sekvenční.

 

Welcome to EDABoard.com

Sponsor

Back
Top