summaryrefslogtreecommitdiff
path: root/Example/combinational_logic/counter
diff options
context:
space:
mode:
authorsaurabhb172019-12-30 12:33:07 +0530
committersaurabhb172019-12-30 12:33:07 +0530
commit09181d02231704f6d691eccfa380eea77503383d (patch)
treec74e4fefc7a8363051afcdc62c5e5792f9ccd253 /Example/combinational_logic/counter
parent9d6371199374495c036588f269e55857939fe2ca (diff)
downloadnghdl-09181d02231704f6d691eccfa380eea77503383d.tar.gz
nghdl-09181d02231704f6d691eccfa380eea77503383d.tar.bz2
nghdl-09181d02231704f6d691eccfa380eea77503383d.zip
Examples modified
Diffstat (limited to 'Example/combinational_logic/counter')
-rw-r--r--Example/combinational_logic/counter/decadecounter.vhdl23
-rw-r--r--Example/combinational_logic/counter/up_counter.vhdl34
-rw-r--r--Example/combinational_logic/counter/up_counter_slv.vhdl (renamed from Example/combinational_logic/counter/counter.vhdl)12
3 files changed, 64 insertions, 5 deletions
diff --git a/Example/combinational_logic/counter/decadecounter.vhdl b/Example/combinational_logic/counter/decadecounter.vhdl
new file mode 100644
index 0000000..6d84280
--- /dev/null
+++ b/Example/combinational_logic/counter/decadecounter.vhdl
@@ -0,0 +1,23 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity decadecounter is
+ port(CLK : in std_logic;
+ RST : in std_logic;
+ Count : out std_logic_vector(9 downto 0));
+end decadecounter;
+
+architecture beh of decadecounter is
+ signal a: std_logic_vector(9 downto 0) := "0000000001";
+begin
+ process(CLK, RST)
+ begin
+ if RST = '1' then
+ a <= "0000000001";
+ elsif rising_edge(CLK) then
+ a <= a(0) & a(9 downto 1); -- rotating left
+ end if;
+ end process;
+ Count <= std_logic_vector (a);
+end beh;
diff --git a/Example/combinational_logic/counter/up_counter.vhdl b/Example/combinational_logic/counter/up_counter.vhdl
new file mode 100644
index 0000000..80e9783
--- /dev/null
+++ b/Example/combinational_logic/counter/up_counter.vhdl
@@ -0,0 +1,34 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity up_counter is
+ port(Clock : in std_logic;
+ CLR : in std_logic;
+ Q : out std_logic_vector(3 downto 0));
+end up_counter;
+
+architecture beh of up_counter is
+ signal tmp: unsigned(3 downto 0) := "0000";
+
+ --------------- Other ways to initialize --------------
+ -- signal tmp: unsigned(3 downto 0) := x"0";
+ -- signal tmp: unsigned(3 downto 0) := (others => '0');
+ -------------------------------------------------------
+
+ begin
+ process (Clock, CLR)
+ begin
+ if (CLR='1') then
+ tmp <= "0000";
+ elsif (Clock'event and Clock='1') then
+ if tmp="1111" then
+ tmp <= x"0";
+ else
+ tmp <= tmp +1;
+ end if;
+ end if;
+ end process;
+
+ Q <= std_logic_vector (tmp);
+end beh;
diff --git a/Example/combinational_logic/counter/counter.vhdl b/Example/combinational_logic/counter/up_counter_slv.vhdl
index ba14df8..ec8a558 100644
--- a/Example/combinational_logic/counter/counter.vhdl
+++ b/Example/combinational_logic/counter/up_counter_slv.vhdl
@@ -1,20 +1,22 @@
+-- This logic is implemented in up_counter.vhdl example as well, but there tmp variable is declared as unsigned
+--whereas here it is declared as std_logic_vector; which requires type conversion.
+--slv stands for std_logic_vector
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
-entity counter is
+entity up_counter_slv is
port(C : in std_logic;
CLR : in std_logic;
Q : out std_logic_vector(3 downto 0));
-end counter;
+end up_counter_slv;
-architecture bhv of counter is
+architecture bhv of up_counter_slv is
signal tmp: std_logic_vector(3 downto 0);
begin
process (C, CLR)
-
begin
if (CLR='1') then
tmp <= "0000";
@@ -27,4 +29,4 @@ architecture bhv of counter is
end process;
Q <= tmp;
-end bhv; \ No newline at end of file
+end bhv;