Nguyên văn bởi thavali
Xem bài viết
Căn bản nhất, bạn nên viết theo mẫu:
if (rising_edge(clk)) then
if (reset = '1') then
...
elsif (clock_enable = '1') then
...
end if;
end if;
Code của bạn viết sai nên rất khó hiểu "ý đồ" của bạn. Count:=count-1, nằm ngoài if (rising_edge(clk)) ... end if, nhưng không có nghĩa là nó sẽ xảy ra vào falling edge. Bạn nên tham khảo lại. Hình như bạn muốn làm một cái up-down counter, tùy theo trường hợp là đếm lên hay đếm xuống. Mình đã tạm viết lại một chút:
entity sensitize is
port (clk_RAM :in std_logic ;
counter_enable :in std_logic ;
count_up : in std_logic;
clk_enable : in std_logic;
output :out std_logic_vector(4 downto 0 ));
end sensitize;
architecture Behavioral of sensitize is
signal count : natural range 0 to 25 := 0;
begin
process (clk_RAM)
begin
if (rising_edge(clk_RAM)) then
if (counter_enable = '0' or count = 25) then
count <= 0;
elsif (clk_enable = '1') then
if (count_up = '1') then
count <= count + 1;
else
count <= count - 1;
end if;
end if;
end if;
end process;
output <= conv_std_logic_vector(count,5);
end Behavioral;
Nếu viết đúng quy tắc thì ISE sẽ nhận ra được up-down counter của bạn.
================================================== =======================
* HDL Synthesis *
================================================== =======================
Performing bidirectional port resolution...
Synthesizing Unit <sensitize>.
Related source file is "C:/Xilinx/test/test.vhd".
Found 5-bit updown counter for signal <count>.
Summary:
inferred 1 Counter(s).
Unit <sensitize> synthesized.
================================================== =======================
HDL Synthesis Report
Macro Statistics
# Counters : 1
5-bit updown counter : 1
Comment