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;
-------------------------------------------------- -----------------------------------------
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;
-------------------------------------------------- -----------------------------------------