Jump to content

    

mixa7109

Участник
  • Content Count

    22
  • Joined

  • Last visited

Community Reputation

0 Обычный

About mixa7109

  • Rank
    Участник
  1. У меня есть JTAG программатор от ST. Можно ли от него завести МК?
  2. Надо подключаться через JTAG?
  3. Я полный чайник в МК. Прикупил себе STM32-E407 и установил keil 5.24. Перед тем как суваться в keil. Я попытался прошить через Arduino по инструкции из даташита. Все было успешно. Потом, я пытался уже что-то сделать в keil. Для начало хотел просто убедиться, что keil видит плату, но увы. Я прочитал куча решений и ни одна мне не помогла. Устанавливал дрова из этой папки F:\Keil_v5\ARM\STLink\USBDriver. Все равно не видит. Поменял STLinkUSBDriver.dll, все равно никакого отклика. Диспетчер устройств находит его вот так. Назначал через программу Zadig драйвер WinUSB. Подключение платы выглядит следующим образом Мне кажется, что я уже все поломал и у меня куча драйвер уже установлено на компьютер. Запутался, что делать?
  4. {cy0, sum_l0} <= sum_l0 + din_l; -- Здесь мы получаем наш перенос cy1 <= cy0; - вот так бы было через регистр sum_h1 <= sum_h1 + din_h0 + cy0; -- Здесь мы его уже используем sum_h1 <= sum_h1 + din_h0 + cy1; В этих двух строчках у нас нет регистра между cout и cin двух сумматоров.
  5. Вообщем вот такая упрощенная схемы вышла у меня. Если кому-то интересна реализация этой схемы на vhdl пишите)
  6. Да, я попробую реализовать второй способ. Можете подробнее описать, как и что должно происходить? И представленный код относится к какому варианту?
  7. Я этот момент исправил, я когда построил rtl схему, увидел, что не так, а вот поправить в сообщении забыл. Вообщем, там так, как "должно быть так"
  8. Можно поподробнее про первый вариант? Пытался его реализовать, но на выходные получалось опять же не то , что надо
  9. Вот описал схему. n_reset_adder <= miStart and n_reset; add_sub1: lpm_add_sub generic map ( lpm_direction => "UNUSED", lpm_representation => data_type, lpm_width => WIDTH_RG ) port map ( clock => clk, clken => miValid, aclr => not n_reset_adder, add_sub => miType, dataa => data_reg, datab => wire_dataB(0), result => wire_out(0) ); process(clk, n_reset) begin if n_reset = '0' then elsif rising_edge(clk) then wire_dataB(0) <= data_reg; wire_dataB(2) <= wire_out(1); wire_dataB(2) <= wire_dataB(1); end if; end process; add_sub2: lpm_add_sub generic map ( lpm_direction => "UNUSED", lpm_representation => data_type, lpm_width => WIDTH_RG ) port map ( clock => clk, clken => miValid, aclr => not n_reset_adder, add_sub => miType, dataa => wire_out(0), datab => wire_dataB(2), result => wire_out(1) ); moData <= wire_out(1); data_reg(WIDTH_DATA - 1 downto 0) <= miData; Результат не сходится с ожиданием, что я не так делаю? А вот схема из квартуса
  10. модуль TE-STM32F407 производства компании Терраэлектроника на основе 32-разрядного микроконтроллера STM32F407 от STMicroelectronics. С ядром Cortex-M4F. Супер старая, но необходимо с ней поработать, а найти информацию по ней не могу...есть у кого-нибудь в закромах информация по ней???
  11. Добрый день всем. Создаю один проект на больших скоростях и мне там необходимо складывать и накапливать большие значения (разрядность вектора более 50). Естественно проседает быстродействие и необходимо ввести латентность на сумматоре (хотя бы 2). На вход сумматора подаётся значения, которые изменяют по линейному закону с каким-то произвольным коэффициентом. Например входные данные могут быть 1,2,3,4,5 и т.д. А на выходе соответственно получаем 1,3,6,10,15. Схема классическая: выход сумматора падает на вход регистра, а его выход на второй вход сумматора. Регистр может инициировать любым значением перед началом работы. Классический аккумулятор! Есть варианты по добавлению второго сумматора для параллельного счета, но пока не удается засунуть его так, чтобы все работало. У кого-нибудь есть мысли, как увеличить быстродействие??
  12. Только что в нем делал диаграммы, но хотелось бы мышкой быстро делать (как в timegen).
  13. Привет. Не имею доступа к закромам, но очень нужен timegen. На просторах интернета не нашел ломанной версии. Можете на мыло скинуть? mixamixa99@yandex.ru
  14. Вообщем, я решил. Все работает. Всем спасибо! Может кому-то спасу пару часов жизни..... Важно, работает только для фала формата .hex DATAWIDTH - задается в generic. library work; use work.Const_type.all; type memory is array (L - 1 downto 0) of std_logic_vector (DATAWIDTH - 1 downto 0); impure function init_mem_hex(FileName : in string) return memory is file data_init : TEXT; variable buf : line; variable mem_data : memory := (others => (others => '0')); variable datain : string(integer(DATAWIDTH / 4) downto 1); begin FILE_OPEN(data_init, FileName, READ_MODE); for i in 0 to L - 1 loop READLINE(data_init, buf); if (buf(buf'LOW) = ':') then shrink_line(buf, 9); READ(L=>buf, VALUE=>datain); mem_data(i) := CONV_STD_LOGIC_VECTOR(HEX_STR_TO_INT(datain), DATAWIDTH); end if; end loop; return mem_data; FILE_CLOSE(data_init); end function; -- signal ram_data : memory := init_mem_hex("./mem_init.hex"); ----------------------------------------------------------- А это файл пакета функций. ibrary ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use std.textio.all; package Const_type is type my_signal_one is array(integer range<>) of std_logic; type my_vector_one is array(integer range<>) of std_logic_vector; type my_vector_sec is array(integer range<>, integer range<>) of std_logic_vector; procedure SHRINK_LINE (str_line : inout line; pos : in integer); function HEX_STR_TO_INT (str : in string) return integer; end package; package body Const_type is function HEX_STR_TO_INT (str : in string) return integer is variable len : integer := str'length; variable ivalue : integer := 0; variable digit : integer := 0; begin for i in len downto 1 loop case str(i) is when '0' => digit := 0; when '1' => digit := 1; when '2' => digit := 2; when '3' => digit := 3; when '4' => digit := 4; when '5' => digit := 5; when '6' => digit := 6; when '7' => digit := 7; when '8' => digit := 8; when '9' => digit := 9; when 'A' => digit := 10; when 'a' => digit := 10; when 'B' => digit := 11; when 'b' => digit := 11; when 'C' => digit := 12; when 'c' => digit := 12; when 'D' => digit := 13; when 'd' => digit := 13; when 'E' => digit := 14; when 'e' => digit := 14; when 'F' => digit := 15; when 'f' => digit := 15; when others => ASSERT FALSE REPORT "Illegal hex character "& str(i) & "! " SEVERITY ERROR; end case; ivalue := ivalue * 16 + digit; end loop; return ivalue; end HEX_STR_TO_INT; procedure SHRINK_LINE (str_line : inout line; pos : in integer) is subtype nstring is string(1 to pos); variable str : nstring; begin if (pos >= 1) then read(str_line, str); end if; end; end package body;