Hallo,
ich möchte wissen, ob die Code-Zeilen in einem kombinatorischen Prozess
sequentiel ausgeführt werden? Ich dachte sie wären alle paralell
ausgeführt aber dann würde ich das folgende Beispiel nicht verstehen :
(1) "v.zero" z.B. wird zuerst auf '0' dann in einer if-Anweisung auf '1'
gesetzt.
(2) Ebenso wird zuerst v, r zugewiesen, dann werden dessen Variablen
andere Werte zugewiesen.
wie ist das denn zu verstehen?
Mit freundlichen Grüßen
Christian
1 | architecture twoproc of count8 is
|
2 | type reg_type is record
|
3 | load : std_logic;
|
4 | count : std_logic;
|
5 | zero : std_logic;
|
6 | cval : std_logic_vector(7 downto 0);
|
7 | end;
|
8 |
|
9 | signal r, rin : reg_type;
|
10 | begin
|
11 | comb : process(d, r) -- combinational process
|
12 | variable v : reg_type;
|
13 | begin
|
14 | v := r; -- default assignment
|
15 | v.load := d.load; v.count := d.count; -- overriding assignments
|
16 | v.zero := ’0’;
|
17 | if r.count = ’1’ then v.cval := r.val + 1; end if; -- module algorithm
|
18 | if r.load = ’1’ then v.cval := d.data; end if;
|
19 | if v.cval = "00000000" then v.zero := ’1’; end if;
|
20 | rin <= v; -- drive register inputs
|
21 | q.dout <= r.cval; q.zero <= r.zero; -- drive module outputs
|
22 | end process;
|
23 |
|
24 | regs : process(clk) -- sequential process
|
25 | begin
|
26 | if rising_edge(clk) then r <= rin; end if;
|
27 | end process;
|
28 | end;
|