Доброго дня! Столкнулся с нежданчиком и ума не приложу что бы это значило ))) Имею рабочий проект, который жрет 23% логических элементов. Меняю в секции initial значение для регистра ([7:0]) c 8'd128 на 8'd129. И...проект начинает жрать весь ресурс логических элементов оО (105%. отключая отладочную шнягу 95%). Попытка отказаться от этой секции и инициализировать по negedge nreset приводит к таким же результатом. При этом в процессе функционирования этот регистр таки достигает этого значения (129 - терминальное состояние). Моя в шоку Ж) На всякий случай привожу кусок кода: Кому интересно - предположения в студию ))
wire ADC_PacketReady; reg APR; initial APR=0; //wire APR = ADC_PacketReady; reg oAPR; initial oAPR=0; reg [7:0] bodcnt; reg [7:0] phase; reg [7:0] bytephase; reg [7:0] adr ; initial adr=128; reg [7:0] ByteToSend; /* reg [15:0] tmp_res_cnt; initial tmp_res_cnt = 1000; reg tmp_res; always @(posedge CLK_50MHZ ) begin if (tmp_res_cnt!=0) tmp_res_cnt<=tmp_res_cnt-1; tmp_res <= (tmp_res_cnt!=0); end */ always @(posedge CLK_50MHZ or negedge nReset) if (!nReset ) begin //adr<=8'd129; end else begin APR <= ADC_PacketReady;// START_ADC_SEQUENCE; oAPR <= APR; if (APR & (~oAPR)) begin adr <= 0; bodcnt <= 24; phase <= 0; bytephase <= 0; end else if (adr != 8'd129) begin if (bodcnt!=0) bodcnt<=bodcnt-1; else begin bodcnt <= 24; if (phase!=10) begin // 0 01 02 03 04 05 06 07 08 09 10 phase<=phase+1; // 0 d7 d6 d5 d4 d3 d2 d1 d0 1 1 if (phase==0) begin if (adr==8'd128) ByteToSend <= 8'hFF; else case (bytephase) 0: ByteToSend <= ACC_Data1[07:00]; 1: ByteToSend <= ACC_Data1[15:08]; 2: ByteToSend <= ACC_Data1[23:16]; 3: ByteToSend <= ACC_Data2[07:00]; 4: ByteToSend <= ACC_Data2[15:08]; 5: ByteToSend <= ACC_Data2[23:16]; endcase end end else begin phase <= 0; if (bytephase!=5) bytephase <= bytephase+1; else begin bytephase <= 0; adr <= adr+1; end end end end
if (adr != 8'd129) begin if (phase>8'd8) TX<=1'b1; //stop bits else if (phase==8'd0) TX<=1'b0; //start bit else begin TX<=ByteToSend[phase-1]; //phase=1..8; 8-phase = 0..7 lsb first end end else TX<=1'b1; end
Здравствуйте! Задайте значение адреса через "parameter", так будет правильно, проведите синтез, потом напишите результат. И еще: советую всегда указывать размерность регистра или шины в битах.
P.S. Адрес = 128 будет выглядеть так: parameter adr = 8'b100000000;
Ну, разрядность данных была в исходном коде. Тут как раз приведен эксперимент из разряда "танцы с бубном". parameter не пробовал - завтра попробую! синтез смотрел - да, там действительно поднаворатило)) но почему - хз. Кстати - прописал модуль генерации ресета, что то типа:
cnt [15:0] rstcnt; initial rstcnt=16'd60000; module myReset( input clk, output reg nreset ); always @(posedge clk) begin if (rstcnt!=0) rstcnt<=rstcnt-16'b1; nreset <= (rstcnt==0); end и нисмотря на то, что его функционал дальше по схеме смехотворен, результат был тот же - проект раздулся в 4 раза Такое ощущение, что превышается квота чего то и "компилятор" пугается и начинает гнать код по другим принципам
Что это за сброс? Зачем он нужен? Почему именно так задается? Диагноз: используйте FSM для возврата схемы в исходное состояние после выполнения всех преобразований над входным сигналом.
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650.
Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
сброс был отладочный - внешний девайс подольше в ресете подержать. на него и завязано то помимо прямого выхода пару линий в Z подержать. функционально с первой причиной полностью развязанный.
Добавлено after 1 hour 3 minutes 42 seconds: parameter помог.
parameter adrmax=8'd129; .... if (!nreset) adr<=maxadr; .... ну и дальше по тексту.
Осталось понять - почему? По логике вещей это одно и тоже в данном контексте. Я понимаю, когда параметр конфигурирует модуль, например input[parameter1:0], но тут же он выступает в качестве обычной константы
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Я этого не оспариваю. Последняя Ваша запись абсолютно корректна. Речь идет о том, что если переписывать данные из регистра в шину, то это делается простым присваиванием. Если переписывать данные в регистр из шины, то это, как правило, делается через D триггер. Однако, Вы употребили термин "защелкивается", что в данном случае явлчется абсолютно неверным термином, именно поэтому я Вас спросил о разнице между FlipFlop и Latch.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения