GregoryTMW 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба Здравствуйте, пытаюсь проверить уровень (0 или 1) таким образом: module test( input clk, inout reg in, output reg out,//этот "провод" установил в 1 output reg led ); always@(posedge clk) begin if (in == 0) led <= 0; else led <= 1; out <= 1; end endmodule на ножке out устанавливаю 1, и проверяю in, соединяя 2 провода(out и in). При включении светодиод горит постоянно, а при соединении in и out он гаснет. Если код исправить таким образом: if (in == 1) led <= 1; else led <= 0; out <= 1; то светодиод также постоянно горит(хотя провода разомкнуты) и при соединении их светодиод светится ещё ярче, а хотелось бы так: с ножки постоянно подаю 1, а другой ножкой проверяю входящее значение(напряжение) при замыкании этих двух проводов. Если имеется возможность, то пожалуйста покажите как правильно это сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба Светодиод зажигается нулём. Это стандартная практика. 4 часа назад, GregoryTMW сказал: При включении светодиод горит постоянно По умолчанию led установлен в 0. Если вход in висит в воздухе, то это тоже будет скорее всего ноль. Этот ноль на in передаётся на выход led -- светодиод горит. (Чтобы выход не висел в воздухе, внутри FPGA задействуют pullup или pulldown) 4 часа назад, GregoryTMW сказал: а при соединении in и out он гаснет. out установлен в 1, эта 1 передаётся на led и гасит светодиод. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба to:andrew_b Здравствуйте, наверное я неправильно объяснил, светодиод у меня подключен катодом на минус к плате, а led к аноду. Если in висит в воздухе (и он равен 0), то при соединении с out (на который я постоянно подаю 1) in должен "принять" 1 и условие: if(in == 1) должно выполниться? Если так, то далее выполнится следующая инструкция, например led <= 1, а иначе (else) на ножку led <= 0. Сейчас в таком варианте: if(in == 1) led <= 1; else led <= 0; out <= 1; out (1) и in не соеденены, но светодиод всё равно горит (при соединении яркость увеличивается). Приведите пожалуйста пример кода для моего случая (если не затруднит). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 9 июля, 2019 Опубликовано 9 июля, 2019 (изменено) · Жалоба А inout reg in - зачем? Может просто input wire in? И что будет если при инициализации led = 0; и больше его не менять? Изменено 9 июля, 2019 пользователем _4afc_ input Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 1 hour ago, GregoryTMW said: Если in висит в воздухе (и он равен 0), Он не равен 0, на него скорее всего наводится 50 Hz из ближайшей розетки. Замкните на землю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 25 минут назад, _4afc_ сказал: А inout reg in - зачем? Может просто input wire in? И что будет если при инициализации led = 0; и больше его не менять? Если Вы имеете ввиду: if(in == 1) led <= 0;//вот так? else led <= 0; out <= 1; светодиод гореть не будет 12 минут назад, xvr сказал: Замкните на землю. in на землю? 14 минут назад, xvr сказал: Замкните на землю. in на землю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 56 minutes ago, GregoryTMW said: in на землю? Да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 2 минуты назад, xvr сказал: Да А как я им тогда буду проверять "входящий" сигнал с out? У меня же in это "вход" для проверки "входящего" значения, а out подключаю к in Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба Вот такая схема подключения: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 17 часов назад, GregoryTMW сказал: always@(posedge clk) begin if (in == 0) led <= 0; else led <= 1; out <= 1; end Внимательно читаем. Вот конструкция: Которая проверяет in == 0 if (in == 0) led <= 0; else led <= 1; А вот out <= 1; выполняется вне зависимости от in == 0, т.е под каждый posedge clk Если хотите, чтобы и out <= 1 выполнялось вместе с led <= 1; то тогда нужны еще пара - begin-end, вставленных после else Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 9 минут назад, iosifk сказал: А вот out <= 1; выполняется вне зависимости от in == 0, т.е под каждый posedge clk изначально так и хотел (постоянная подача 1 с out) 10 минут назад, iosifk сказал: то тогда нужны еще пара - begin-end да, это стандартный блок (практически в любом ЯП), но как я писал выше мне необходимо постоянно "подавать" с out - 1, а при помощи in проверять что "пришло" и в зависимости от значения которое я получил выполнить действие/инструкцию. Согласно "схеме" которую я опубликовал, какой код необходим? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 21 hours ago, GregoryTMW said: У меня же in это "вход" для проверки "входящего" значения, а out подключаю к in Сейчас у вас in это вход для сбора помех (пока кнопка не нажата). Нельзя голые КМОП входы оставлять висящими в воздухе. Что бы убедится, что у вас вход работает, отсоедините его от клавиатуры и подсоедините к земле (временно!) Когда убедитесь, включите pull-up (или pull-down) на ноге in, и будет вам счастье :) То, что схема описанна на Verilog и [наверное] работает в симуляторе, ещё не отменяет законов физики - у FPGA входы сделаны не в виде Verilog абстракций, а в виде вполне конкретных полевых транзисторов. И им необходимо обеспечить такой режим работы, что бы функционирование FPGA определялось загруженным RTL, а не аварийными режимами по входам и выходам. Кстати, если у вас LED подсоединён так, как нарисован (без резистора), то это ещё один путь спалить FPGA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 15 минут назад, xvr сказал: Что бы убедится, что у вас вход работает, отсоедините его от клавиатуры и подсоедините к земле (временно!) Сделал так, но ничего не включается(светодиод не горит), подключил его через 270 Ом, вот код: module test( input clk, output reg in, output reg out, output reg led ); always@(posedge clk) begin if(in == 1) led <= 1; else led <= 0; // out <= 1; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба Приветствую! У вас чип какой? Altera MAX II? Тогда для начала включите в опциях для всех входных пинов in режим PULL UP и Schmitt Trigger. А для выходных пинов out используете режим Open-Drain input [M-1:0] pin_in, inout [N-1:0] pin_ou, ... reg [N-1:0] pin_ou_en; assign pin_ou[0] = (r_ou_en[0]==1'b1) ? 1'b0 : 1'bz; ... Тогда подавая поочереди на выходные pin_ou[*] уровень 0 вы сможете найти входные пины на которые через кнопку попадет этот 0. И при этом не будет риска коротнуть с другими выходными пинами через несколько одновременно нажатых кнопок. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GregoryTMW 0 10 июля, 2019 Опубликовано 10 июля, 2019 · Жалоба 3 минуты назад, RobFPGA сказал: У вас чип какой? Altera MAX II? Да, плата как на фото, а какие значения у констант M и N (это количество кнопок?). Спасибо, за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться