====== Code Examples ======
===== Door opener, combinational =====
^ VHDL ^ Verilog ^
|
library ieee;
use ieee.std_logic_1164.all;
entity DoorOpener is
port (C, H, P : in std_logic;
F : out std_logic);
end DoorOpener;
architecture beh of DoorOpener is
begin
process (C, H, P)
begin
F <= not(C) and (H or P);
end process;
end beh;
|
module DoorOpener(C, H, P, F);
input C, H, P;
output F;
reg F;
always @(C, H, P)
begin
F <= (~C) & (H | P);
end
endmodule
|
===== D-FF, variable width, sequential =====
^ VHDL ^ Verilog ^
|
library IEEE;
use IEEE.std_logic_1164.all;
entity DFF is
generic (Width : natural);
port (
CLK : in std_logic;
RST : in std_logic;
D : in std_logic_vector(Width-1 downto 0);
Q : out std_logic_vector(Width-1 downto 0));
end entity DFF;
architecture RTL of DFF is
begin -- DFF with asynchr. low-active reset
DFF : process (CLK, RST)
begin
if (RST = '0') then
Q <= (others => '0');
elsif rising_edge(CLK) then
Q <= D;
end if;
end process DFF;
end architecture RTL;
|
module DFF (CLK, RST, D, Q);
parameter Width = 8;
input CLK, RST;
input [Width-1:0] D;
output [Width-1:0] Q;
reg [Width-1:0] Q;
// DFF with asynchr. low-active reset
always @(posedge CLK or negedge RST )
begin: DFF // block Name
if (~RST) begin
Q = 0;
end
else
Q = D;
end
endmodule
even shorter ...
module DFF (CLK, RST, D, Q);
parameter Width = 8;
input CLK, RST;
input [Width-1:0] D;
output [Width-1:0] Q;
reg [Width-1:0] Q;
// DFF with asynchr. low-active reset
always @(posedge CLK or negedge RST)
if (~RST) Q = 0;
else Q = D;
endmodule
|
{{:courses:system_design:vhdl_vs_verilog:folie402_ff-waveform.png?nolink|D-FF Waveform}}