|
|
  |
Нестандартный счетчик |
|
|
|
Dec 6 2005, 15:13
|
Группа: Новичок
Сообщений: 5
Регистрация: 6-12-05
Пользователь №: 11 895

|
помогите пожалуйста сделать(на плис XILINIX) для Лабораторной работы (препод совсем замучал) такую схему, чтобы на входе был сигнал CLK и лоад (разрешение загрузки если 1 то загружаем числу в SD) и 8 разрядная шина SD в которую грузим числа. На выходе (out) необходимо получить следующее, импульс, длительность которого будет зависеть от входного числа, то есть если вошло число 8 то импульс длинный, вошло 2 -импульс короткий. Помогите хотя бы принцип накиньте
|
|
|
|
|
Dec 6 2005, 19:54
|
Группа: Новичок
Сообщений: 5
Регистрация: 6-12-05
Пользователь №: 11 895

|
Цитата(sazh @ Dec 6 2005, 19:03)  module sd_interval (clk, load, sd, out_interval);
input clk; input load; // интервал строба load больше или равен периода clk input [3:0] sd; output out_interval;// длительностью в целое число sd (исключая 0)
reg [3:0] ct;// счетчик reg trigger_enable;// интервал, в котором разрешена работа счетчика reg [1:0] shift_left_rg;
wire enable_load;
assign out_interval = trigger_enable; /// схема формирования одиночного импульса enable_load длительностью в один такт clk /// по переднему фронту сигнала load always @ (posedge clk) begin shift_left_rg <= {shift_left_rg[0], load};// end
assign enable_load = shift_left_rg[0] & ~shift_left_rg[1]; ///////////////////////////////////////////////////////////////////////////// always @ (posedge clk) begin if (enable_load == 1'b1) ct <= sd; // по enable_load в счетчик загружаем число sd else if (trigger_enable == 1'b1) ct <= ct - 1'b1;// работаем на вычитание в интервале trigger_enable end always @ (posedge clk) begin if (enable_load == 1'b1) trigger_enable <= 1'b1;// по enable_load разрешаем интервал работы счетчика else if (ct == 4'd1)//когда счетчик досчитает до значения единица, запрещаем работу счетчика trigger_enable <= 1'b0; end endmodule Спасибо большое за такой способ решения, я не знаком с программированием там, мне задано было схемой нарисовать, вот щас накидал схему, посмотрите будет ли она работать(возможности проверить нет только через неделю)Load управляет загрузкой данных Только одна поправочка нужна что бы импульс был следующего вида 100000001, или 10001 то есть ровная линия, а потом вниз уходить будет на сколько то тактов а потом опять ровная линия
Сообщение отредактировал rassigor - Dec 6 2005, 20:10
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 6 2005, 21:43
|
Группа: Новичок
Сообщений: 5
Регистрация: 6-12-05
Пользователь №: 11 895

|
С щ на вход И это я тупанул, скажите а зачем дешифратор перед рещистром, вот мне кстати помогтоже один человек и написал такой код Код:
library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all;
entity One_Pulse is port( Clk : in std_logic; Rst : in std_logic; Ld : in std_logic; SD : in std_logic_vector(7 downto 0); Q : out std_logic ); end One_Pulse;
architecture Struct of One_Pulse is signal Cnt : std_logic_vector(7 downto 0); constant STOP: std_logic_vector(7 downto 0) := (others=>'0'); begin MAIN:process(Clk,Rst,Ld,SD) begin if Rst='1' then Q <= '0'; Cnt <= STOP; elsif rising_edge(Clk) then if Ld='1' then Cnt<=SD; elsif Cnt/= STOP then Cnt<=Cnt - '1'; end if; if Cnt=STOP then Q<='0'; else Q<='1'; end if; end if; end process; end Struct;
А это проверочный стенд для него
Код:
library ieee; use ieee.std_logic_unsigned.all; use ieee.std_logic_1164.all;
entity One_Pulse_TB is end One_Pulse_TB;
architecture TB_ARCHITECTURE of One_Pulse_TB is component one_pulse port( Clk : in std_logic; Rst : in std_logic; Ld : in std_logic; SD : in std_logic_vector(7 downto 0); Q : out std_logic ); end component; signal Clk : std_logic:='0'; signal Rst : std_logic; signal Ld : std_logic; signal SD : std_logic_vector(7 downto 0); signal Q : std_logic; constant PERIODE : time := 10 ns;
begin UUT : one_pulse port map ( Clk => Clk, Rst => Rst, Ld => Ld, SD => SD, Q => Q); GEN: Clk<=not Clk after PERIODE; TEST:process begin Rst<='1';Ld<='0';SD<=(others=>'0'); wait for PERIODE*4; Rst<='0'; wait until Clk='1'; SD<=x"02"; Ld<='1'; wait until Clk='1'; SD<=x"00"; Ld<='0'; wait for PERIODE*10; wait until Clk='1'; SD<=x"08"; Ld<='1'; wait until Clk='1'; SD<=x"00"; Ld<='0'; wait for PERIODE*20; end process; end TB_ARCHITECTURE;
А это отчёт синтезатора об используемых ресурсах
Код:
Function Generators 12 CLB Slices 6 Dffs or Latches 9 Clk 91.4 MHz
хотя он мне не нужен но просто его привел
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|