Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.sci.electronics > #192688 > unrolled thread
| Started by | Mathias Weierganz <mathias.weierganz@gmx.net> |
|---|---|
| First post | 2015-09-22 14:34 +0200 |
| Last post | 2015-09-23 11:41 +0200 |
| Articles | 6 — 2 participants |
Back to article view | Back to de.sci.electronics
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
| From | Mathias Weierganz <mathias.weierganz@gmx.net> |
|---|---|
| Date | 2015-09-22 14:34 +0200 |
| Subject | Verilog-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]
| From | Johann Klammer <klammerj@NOSPAM.a1.net> |
|---|---|
| Date | 2015-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]
| From | Mathias Weierganz <mathias.weierganz@gmx.net> |
|---|---|
| Date | 2015-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]
| From | Johann Klammer <klammerj@NOSPAM.a1.net> |
|---|---|
| Date | 2015-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]
| From | Mathias Weierganz <mathias.weierganz@gmx.net> |
|---|---|
| Date | 2015-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]
| From | Mathias Weierganz <mathias.weierganz@gmx.net> |
|---|---|
| Date | 2015-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