Jeg realiserede koden i vhdl .... men stadig problemer ...

D

DoraSzasz

Guest
Hej ... jeg ønsker koden i Xilinx .... jeg indset koden i VHDL, men jeg kender ikke til sølet i Verilog ...

Her er den kode .... men jeg har et problem på tælleren ... Efter 10 counters vises antallet mindre med 10, at den tidligere nummer ....

library IEEE;
brug ieee.std_logic_1164.all;
brug ieee.std_logic_arith.all;
brug ieee.std_logic_unsigned.all;

enhed counter er
port (enable1: i std_logic;
CLK: i bit;
nulstillet, reset1: i bit;
bcd_d: out std_logic_vector (7 downto 0));

udgangen counter;

arkitektur arch af counter er
signal qint, qint1: std_logic_vector (3 downto 0);
signal full1: std_logic;
begynd

CNT1: processen (enable1, CLK, reset)

- Erklæringer

begynd
hvis reset ='1 'og derefter
qint <= (andre =>'0 ');
elsif CLK ='1 'og clk'event derefter
hvis enable1 ='1 'og derefter
hvis qint (0) ='1 'og qint (3) ='1'
og derefter

full1 <='1 ';

qint <= (andre =>'0 ');

anden
qint <= qint 1;
full1 <='0 ';
udgangen, hvis;
udgangen, hvis;
udgangen, hvis;
bcd_d (3 downto 0) <= qint;
ende proces;

CNT2: processen (full1, CLK, reset1)
begynd
hvis reset1 ='1 'og derefter
qint1 <= (andre =>'0 ');
elsif CLK ='1 'og clk'event derefter
hvis full1 ='1 'og derefter
hvis qint1 (0) ='1 'og qint1 (3) ='1'
og derefter
qint1 <= (andre =>'0 ');

anden
qint1 <= qint1 1;

udgangen, hvis;
udgangen, hvis;
udgangen, hvis;
bcd_d (7 downto 4) <= qint1;
ende proces;
udgangen arch;

Kan du sølet i Verilog og rette fejlen?
Thank you a lot!

 
Hvis jeg har forstået det korrekt, du
har foretaget et nydeligt
almindelig fejl:
du vil foretage en handling, når

hvis qint (0) ='1 'og qint (3) ='1'

og derefter
FF

men du registrerer denne betingelse i full1
FF
derefter resten af dit logik 'ser' betingelsen en ur
cyklus senere;
enten ændre værdien af qint som udstikker full1 fra
'9 'Til'8' eller ændre full1 fra flip-flop til combo logik;
se på vedlagte bølgeformer hvor full1 er aktiv
i mit eksempel kode [top] og din kode [nedenfor]

Det verilog kode selv:
Code:

modul counter

(

input CLK, enable1,

input nulstillet, reset1,

output [7:0] bcd_d

);reg [3:0] qint, qint1;altid @ (posedge CLK eller posedge reset)

begynd

if (nulstilling) qint <= 4'h0;

ellers hvis (enable1)

if (qint == 4'h9) qint <= 4'h0;

ellers qint <= qint 4'h1;

ellers qint <= qint;

endewire full1 = (qint == 4'h9)?
1'b1: 1'b0;altid @ (posedge CLK eller posedge reset1)

if (reset1) qint1 <= 4'h0;

ellers hvis (full1)

if (qint1 == 4'h9) qint1 <= 4'h0;

ellers qint1 <= qint1 4'h1;

ellers qint1 <= qint1;tildele bcd_d = (qint1, qint);endmodule
 

Welcome to EDABoard.com

Sponsor

Back
Top