Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.sci.electronics > #192688 > unrolled thread

Verilog-Frage von VHDL-Programmierer

Started byMathias Weierganz <mathias.weierganz@gmx.net>
First post2015-09-22 14:34 +0200
Last post2015-09-23 11:41 +0200
Articles 6 — 2 participants

Back to article view | Back to de.sci.electronics


Contents

  Verilog-Frage von VHDL-Programmierer Mathias Weierganz <mathias.weierganz@gmx.net> - 2015-09-22 14:34 +0200
    Re: Verilog-Frage von VHDL-Programmierer Johann Klammer <klammerj@NOSPAM.a1.net> - 2015-09-22 15:37 +0200
      Re: Verilog-Frage von VHDL-Programmierer Mathias Weierganz <mathias.weierganz@gmx.net> - 2015-09-22 15:49 +0200
        Re: Verilog-Frage von VHDL-Programmierer Johann Klammer <klammerj@NOSPAM.a1.net> - 2015-09-22 21:54 +0200
          Re: Verilog-Frage von VHDL-Programmierer Mathias Weierganz <mathias.weierganz@gmx.net> - 2015-09-23 08:06 +0200
    Re: Verilog-Frage von VHDL-Programmierer Mathias Weierganz <mathias.weierganz@gmx.net> - 2015-09-23 11:41 +0200

#192688 — Verilog-Frage von VHDL-Programmierer

FromMathias Weierganz <mathias.weierganz@gmx.net>
Date2015-09-22 14:34 +0200
SubjectVerilog-Frage von VHDL-Programmierer
Message-ID<mtrhrs$1g3$1@news.albasani.net>
Ich versuche gerade Verilog zu lernen und übertrage dazu
ein einfaches Programm von VHDL nach Verilog. Aber es funktioniert
nicht und ich kann den Fehler nicht finden. Vermutlich wird es ganz
einfach sein...

Das folgende VHDL-Programm übernimmt ein asynchrones Signal i und
erzeugt daraus einen Puls o mit der Länge von clk.
Die positive Flanke von i setzt das i_ff. Das i_ff wird mit clk
in das Schieberegister sr übernommen und durchgeschoben. Wenn im
sr die Bitfolge 01X steht, wird o für einen Takt high.


entity risingedge2pulse is
Port (
    clk : in std_logic;
    i : in std_logic;
    o: out std_logic
    ) ;
end risingedge2pulse;

architecture Behavioral of risingedge2pulse is
			
  signal i_ff: STD_LOGIC;
  signal sr: std_logic_vector (2 downto 0);

begin

process (clk, i, sr)
begin

    if (sr(1) = '1') then
       i_ff <= '0';
    elsif  rising_edge(i) then
       i_ff <= '1';
    end if;

    if  rising_edge(clk) then
       sr(0) <= i_ff;
       sr(2 downto 1) <= sr(1 downto 0); 	
       o <= sr(1) and not sr(2);
    -- Ausgang wird nur aktiv, wenn positive Flanke durch das sr läuft
    end if;
end process;
end Behavioral;


Und hier kommt mein Verilog-Versuch (an dessen Ausgang nie etwas raus
kommt):

module risingedge2pulse_v(
     input clk,
     input i,
     output o
     );

reg [2:0] sr;
reg i_latch;

always @(posedge i or posedge sr[1]) begin
	if (sr[1] == 1) begin
		i_latch <= 0;
	end else begin
		i_latch <= 1;
	end
end

always @(posedge clk) begin
	sr[0] <= i_latch;
	sr[2:1] <= sr[1:0];
	oi <= sr[1] &~ sr[2];
end

assign o = oi;
endmodule

[toc] | [next] | [standalone]


#192691

FromJohann Klammer <klammerj@NOSPAM.a1.net>
Date2015-09-22 15:37 +0200
Message-ID<mtrlhs$qfc$2@speranza.aioe.org>
In reply to#192688
On 09/22/2015 02:34 PM, Mathias Weierganz wrote:
[...]
> 
> reg [2:0] sr;
> reg i_latch;
> 
> always @(posedge i or posedge sr[1]) begin
>     if (sr[1] == 1) begin
>         i_latch <= 0;
>     end else begin
>         i_latch <= 1;
>     end
> end
> 
> always @(posedge clk) begin
>     sr[0] <= i_latch;
>     sr[2:1] <= sr[1:0];
>     oi <= sr[1] &~ sr[2];
> end
> 
> assign o = oi;
> endmodule

kommen nur X 'raus?
Kannst du das sr[] am anfang auf 0 setzen? 
(ich glaube mit einem initial block)

[toc] | [prev] | [next] | [standalone]


#192692

FromMathias Weierganz <mathias.weierganz@gmx.net>
Date2015-09-22 15:49 +0200
Message-ID<mtrm9c$9me$1@news.albasani.net>
In reply to#192691
Am 22.09.2015 15:37, schrieb Johann Klammer:
> kommen nur X 'raus?
> Kannst du das sr[] am anfang auf 0 setzen?
> (ich glaube mit einem initial block)
>


Ich hab es nicht simuliert, sondern programmiert (Spartan3).
Der Ausgang ist immer 0 und auch im sr[] tut sich nichts.

Aber auch wenn ich sr initialisiere (reg [2:0] sr = 3'b000;)
ändert das nichts.

[toc] | [prev] | [next] | [standalone]


#192705

FromJohann Klammer <klammerj@NOSPAM.a1.net>
Date2015-09-22 21:54 +0200
Message-ID<mtsbmh$iuk$1@speranza.aioe.org>
In reply to#192692
On 09/22/2015 03:49 PM, Mathias Weierganz wrote:
> Am 22.09.2015 15:37, schrieb Johann Klammer:
>> kommen nur X 'raus?
>> Kannst du das sr[] am anfang auf 0 setzen?
>> (ich glaube mit einem initial block)
>>
> 
> 
> Ich hab es nicht simuliert, sondern programmiert (Spartan3).
> Der Ausgang ist immer 0 und auch im sr[] tut sich nichts.
> 
> Aber auch wenn ich sr initialisiere (reg [2:0] sr = 3'b000;)
> ändert das nichts.

iverilog gibt mir die errors:
marw.v:24: error: Unable to bind wire/reg/memory `oi' in `risingedge2pulse_v'
marw.v:24: error: Unable to elaborate r-value: oi
marw.v:21: error: Could not find variable ``oi'' in ``risingedge2pulse_v''

[toc] | [prev] | [next] | [standalone]


#192727

FromMathias Weierganz <mathias.weierganz@gmx.net>
Date2015-09-23 08:06 +0200
Message-ID<mttfh7$ooc$1@news.albasani.net>
In reply to#192705
Am 22.09.2015 21:54, schrieb Johann Klammer:
> iverilog gibt mir die errors:
> marw.v:24: error: Unable to bind wire/reg/memory `oi' in `risingedge2pulse_v'
> marw.v:24: error: Unable to elaborate r-value: oi
> marw.v:21: error: Could not find variable ``oi'' in ``risingedge2pulse_v''
>

Meine Schuld, weil ich die Formatierung für die Newsgroup lesbarer
machen wollte. Dabei ist mir die Deklaration reg oi; abhanden gekommen.
Das ist also nicht das Problem. Die Xilinx ISE übersetzt ja auch
fehlerfrei.

[toc] | [prev] | [next] | [standalone]


#192736

FromMathias Weierganz <mathias.weierganz@gmx.net>
Date2015-09-23 11:41 +0200
Message-ID<mtts49$fjs$1@news.albasani.net>
In reply to#192688
Am 22.09.2015 14:34, schrieb Mathias Weierganz:
> Ich versuche gerade Verilog zu lernen und übertrage dazu
> ein einfaches Programm von VHDL nach Verilog. Aber es funktioniert
> nicht und ich kann den Fehler nicht finden. Vermutlich wird es ganz
> einfach sein...
>

Es war ganz einfach - aber nicht einfach zu finden: Das Signal kommt
schlicht und ergreifend nicht an. Entweder ein Defekt im FPGA oder
im Layout. (Bei BGAs kann man halt schlecht messen)
Wenigstens sind meine Zweifel bezüglich meines ersten Verilogprogramms
jetzt behoben. Es funktioniert wie es soll.

[toc] | [prev] | [standalone]


Back to top | Article view | de.sci.electronics


csiph-web