Jump to content

    

Search the Community

Showing results for tags 'verilog'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Сайт и форум
    • Новости и обсуждения сайта и форума
    • Другие известные форумы и сайты по электронике
    • В помощь начинающему
    • International Forum
    • Образование в области электроники
    • Обучающие видео-материалы и обмен опытом
  • Cистемный уровень проектирования
    • Вопросы системного уровня проектирования
    • Математика и Физика
    • Операционные системы
    • Документация
    • Разработка цифровых, аналоговых, аналого-цифровых ИС
    • Электробезопасность и ЭМС
    • Управление проектами
    • Neural networks and machine learning (NN/ML)
  • Программируемая логика ПЛИС (FPGA,CPLD, PLD)
    • Среды разработки - обсуждаем САПРы
    • Работаем с ПЛИС, области применения, выбор
    • Языки проектирования на ПЛИС (FPGA)
    • Системы на ПЛИС - System on a Programmable Chip (SoPC)
  • Цифровая обработка сигналов - ЦОС (DSP)
    • Сигнальные процессоры и их программирование - DSP
    • Алгоритмы ЦОС (DSP)
  • Микроконтроллеры (MCs)
    • Cредства разработки для МК
    • ARM
    • AVR
    • MSP430
    • Все остальные микроконтроллеры
    • Отладочные платы
  • Печатные платы (PCB)
    • Разрабатываем ПП в САПР - PCB development
    • Работаем с трассировкой
    • Изготовление ПП - PCB manufacturing
  • Сборка РЭУ
    • Пайка, монтаж, отладка, ремонт
    • Корпуса
    • Вопросы надежности и испытаний
  • Аналоговая и цифровая техника, прикладная электроника
    • Вопросы аналоговой техники
    • Цифровые схемы, высокоскоростные ЦС
    • Rf & Microwave Design
    • Метрология, датчики, измерительная техника
    • АВТО электроника
    • Умный дом
    • 3D печать
    • Робототехника
  • Силовая Электроника - Power Electronics
    • Силовая Преобразовательная Техника
    • Обратная Связь, Стабилизация, Регулирование, Компенсация
    • Первичные и Вторичные Химические Источники Питания
    • Высоковольтные Устройства - High-Voltage
    • Электрические машины, Электропривод и Управление
    • Индукционный Нагрев - Induction Heating
    • Системы Охлаждения, Тепловой Расчет – Cooling Systems
    • Моделирование и Анализ Силовых Устройств – Power Supply Simulation
    • Компоненты Силовой Электроники - Parts for Power Supply Design
  • Интерфейсы
    • Форумы по интерфейсам
  • Поставщики компонентов для электроники
    • Поставщики всего остального
    • Компоненты
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир
    • Обсуждение Майнеров, их поставки и производства
  • Дополнительные разделы - Additional sections
    • Встречи и поздравления
    • Ищу работу
    • Предлагаю работу
    • Kуплю
    • Продам
    • Объявления пользователей
    • Общение заказчиков и потребителей электронных разработок

Calendars

  • ELECTRONIX Community Calendar

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Город


skype


Facebook


Vkontakte


LinkedIn


Twitter


G+


Одноклассники

Found 11 results

  1. Добра всем! Поискал в форуме в разных ветках, но сразу не нашёл ответа на такой вопрос: поставлена задача для наших проектов доказать соответствие оных директивам DO-254 и иже с ними. Проекты написаны как на VHDL и Verilog (SV), так и в схематике. Причём ПЛИС Actel и Altera. Вопрос: откуда нам, первый раз столкнувшимся со словами Code Coverage, начать сей нелёгкий и тернистый путь? Всё комментарии, а тем паче, ссылки, книги и прочее, приветствуются. Оптимально Mentor (ModelSim и QuestaSim), но и Aldec пойдёт, если он умеет это лучше.
  2. Доброго всем пятничного! Либо уже устал к концу недели, либо ещё что, но не могу понять в чём дело: module tb; logic clk; initial begin clk = 0; forever #10ns clk = !clk; end; task process_zone; input logic [7:0] size; output logic process_zone_end; enum {ST_ZONE_IDLE, ST_ZONE, ST_END_ZONE} state_zone; integer i; i = 0; forever @(posedge clk) begin case (state_zone) ST_ZONE_IDLE : state_zone <= ST_ZONE; ST_ZONE : state_zone <= i == size ? ST_END_ZONE : ST_ZONE; ST_END_ZONE : state_zone <= ST_END_ZONE; default : state_zone <= ST_ZONE_IDLE; endcase i = state_zone == ST_ZONE ? i + 1 : 0; process_zone_end = state_zone == ST_END_ZONE; end endtask : process_zone logic state_next_zone; initial #10ns process_zone (8'd5, state_next_zone); endmodule : tb state_next_zone остаётся в третьем состоянии, невзирая на process_zone_end: ЧЯДНТ? Проект на всякий случай также прилагаю. test.zip
  3. Компания Syntacore, разработчик микропроцессорного IP, ищет сотрудника на позицию RTL Designer. Обязанности: Разработка и верификация сложных функциональных модулей для ASIC на Verilog/System Verilog. Требования: Опыт разработки и верификации RTL для ASIC от 3 лет; Отличное знание Verilog/System Verilog; Опыт использования RTL симулятора от 3 лет (any vendor); Знакомство с архитектурой современных процессоров, знание современных SoC интерфейсов (ACE, AXI); Уверенный пользователь Linux; Знание английского языка на уровне чтения технической документации и умения вести переписку на технические темы; Опыт работы с системами контроля версий. Мы предлагаем: Высокую оплату труда (по результатам собеседования); Оформление по ТК РФ; Интересную и перспективную работу, возможность быстрого профессионального и карьерного роста; Гибкий рабочий график; ДМС, оплачиваемый отпуск и больничный; Возможность публикаций и поездок на конференции. Контактная информация: hr@syntacore.com Дарья Также другие вакансии компании можно посмотреть на сайте https://spb.hh.ru/employer/2132324
  4. Разрабатываю CIC фильтр с порядком 7 и больше, децимацией порядка 100 и с сокращением разрядности регистров по методу Хогэнауэра. В расчётах появляются числа с разрядностью 66...80. Пока числа фигурируют в функциях, я могу использовать reg[127:0] для хранения и передачи результатов вычислений. Но при instantiation и generate нужны константы в localparam. А localparam longint param_name = f(x); имеет 64 разряда, что недостаточно. Пишу так, чтобы модель работала в Icarus. Какие предложите способы обойти это?
  5. Добра всем! Есть исходный модуль, описанный так: module intm ( input res, input [7:0] di, input wr, input cs, input [3:0] a, output reg [7:0] do, input [7:0] int, output reg [7:0] int_m ); reg [7:0] mode; reg adr; always @ (*) case ({cs,a[3:0]}) 5'b10000 : adr = 1'b1; default : adr = 1'b0; endcase always @ (*) case (adr) 1'b1 : do = mode ; default : do = 8'b0; endcase always @ (posedge res or posedge wr) if (res) mode <= 0; else if (adr) mode <= di ; always @ (*) int_m = (~int) & mode; endmodule И есть его "прилизанная" модификация: module intm ( input res, input [7:0] di, input wr, input cs, input [3:0] a, output [7:0] d_o, input [7:0] intpt, output [7:0] int_m ); reg [7:0] mode; wire adr; assign adr = {cs,a} == 5'b10000 ; assign d_o = adr ? mode : 8'b0 ; always @ (posedge res or posedge wr) if (res) mode <= 8'b0; else if (adr) mode <= di; assign int_m = ~intpt & mode; endmodule Исходный код в RTL выглядит так: в то время как "прилизанный" так: Вопросы: куда делся декодер Decoder0 и какой test bench написать, чтобы доказать или опровергнуть идентичность реализаций? На вс. случай прилагаю сами проекты... new.zip old.zip
  6. Здравствуйте, пытаюсь проверить уровень (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, а другой ножкой проверяю входящее значение(напряжение) при замыкании этих двух проводов. Если имеется возможность, то пожалуйста покажите как правильно это сделать.
  7. Приветствую! Многие кто пишет на SystemVerilog/Verilog знаком с оператором для динамического выбора нужных кусков вектора/переменной/массива_регистров. +: -: Больше часа ломал голову, как применить его в моем случае, может под вечер устал и не соображаю. Вот то, что мне нужен сделать (если бы стандарт верилога поддерживал такую запись для варьируемого индекса) data_o <= {buffer[4+shift_size-1:4],tmp[4:shift_size-1]}; Подскажите, пожалуйста, как описать такую конструкцию? ведь в ней варьируемая ширина вектора, а не фиксированная часть. Поддерживает ли верилог подобные штуки? Вот весь код. Сразу отвечаю, что пока не симулил, т.к. смысла нет (синтаксическая ошибка range must be bounded by constant expressions), и обычно планирую это делать следующим этапом, пока что я уперся в это. Если есть желающие, то прошу оставить обратную связь касательно кода. Буду рад любой аргументированной критике. Под Vivado 2018.2 module frame_aligner ( input clk_i , // Clock input arst_n , // Asynchronous reset active low input sync_i , input [3:0] data_i , output logic [5:0] data_o , output logic valid_o , // duty cycle = 2/3 output logic synced_o ); localparam SYNC_PATT = 12'b111111_000000; localparam SYNC_PATT_MR = ~SYNC_PATT; /*------------------------------------------------------------------------------ -- Functions ------------------------------------------------------------------------------*/ function automatic int unsigned clogb2_pure_f( input [31:0] value ); int unsigned i ; int unsigned temp ; begin temp = 32; for (i=31; i>0; i=i-1) begin if (2**i >= value) begin temp = i; end end return temp ; end endfunction function automatic logic [11:0] dynamic_shift_f ( input [11:0] data_i, input [clogb2_pure_f(12) - 1:0] ss); dynamic_shift_f = data_i; for (int i = 0; i < ss; i++) begin dynamic_shift_f = {dynamic_shift_f[0],dynamic_shift_f[11:1]}; end return dynamic_shift_f; endfunction /*------------------------------------------------------------------------------ -- Signals declaration ------------------------------------------------------------------------------*/ logic sync_ff,sync_fr,sync_cdc; typedef enum logic [1:0] { INIT, FIND_PATTERN, SYNC_MODE_SHIFT,SYNC_MODE_ZERO } fsm_t; fsm_t state, state_next; logic [ 1:0] cnt ; logic [11:0] buffer ; logic strb ; logic [11:0] shifted_data; logic [ 4:0] tmp ; logic match; logic [2:0] shift_size,shift_size_event; /*------------------------------------------------------------------------------ -- Clock Domain crossing ------------------------------------------------------------------------------*/ synchronize_ff #(.FF_CNT(3)) i_synchronize_ff (.clk_i(clk_i), .rstn_i(arst_n), .data_i(sync_i), .data_o(sync_cdc)); always_ff @(posedge clk_i or negedge arst_n) begin : proc_sync_ff if(~arst_n) begin sync_ff <= 0; end else begin sync_ff <= sync_cdc; end end assign sync_fr = !sync_ff && sync_cdc; /*------------------------------------------------------------------------------ -- Functional ------------------------------------------------------------------------------*/ always_ff @(posedge clk_i or negedge arst_n) begin : proc_cnt if(~arst_n) begin cnt <= 0; end else begin cnt <= cnt < 2 ? cnt + 1'b1 : '0; end end assign strb = cnt == 2; always_ff @(posedge clk_i or negedge arst_n) begin : proc_buffer if(~arst_n) begin buffer <= 0; end else begin buffer <= {data_i,buffer[7:4]}; end end always_ff @(posedge clk_i or negedge arst_n) begin : proc_shift_size if(~arst_n) begin shift_size <= 0; end else if ( strb ) begin if( state == FIND_PATTERN ) begin if( !match ) begin shift_size <= shift_size < 5 ? shift_size + 1'b1 : '0 ; end else begin shift_size <= shift_size < 5 ? shift_size + 1'b1 : '0 ; end end end end assign shift_size_event = ( shift_size != 0 ) ? ( 5 ) : ( shift_size - 1 ); always_ff @(posedge clk_i or negedge arst_n) begin : proc_shifted_data if(~arst_n) begin shifted_data <= 0; end else if (strb) begin shifted_data <= dynamic_shift_f(buffer,shift_size); end end assign match = ( shifted_data == SYNC_PATT ) || ( shifted_data == SYNC_PATT ); /*------------------------------------------------------------------------------ -- FSM ------------------------------------------------------------------------------*/ always_ff @(posedge clk_i or negedge arst_n) begin : proc_state if(~arst_n) begin state <= INIT; end else begin state <= state_next; end end always_comb begin : proc_state_next state_next = state; case (state) INIT : state_next = ( sync_fr ) ? ( FIND_PATTERN ): ( state ); FIND_PATTERN : state_next = ( match ) ? ((shift_size_event != 0 ) ? (SYNC_MODE_SHIFT) : (SYNC_MODE_ZERO)): ( state ) ; SYNC_MODE_SHIFT : state_next = state; SYNC_MODE_ZERO : state_next = state; default : state_next = INIT ; endcase end /*------------------------------------------------------------------------------ -- data to output ------------------------------------------------------------------------------*/ always_ff @(posedge clk_i or negedge arst_n) begin : proc_data_o if(~arst_n) begin data_o <= '0; valid_o <= 1'b0; tmp <= '0; end else begin case (state) SYNC_MODE_SHIFT : begin case (cnt) 1 : begin data_o <= {buffer[4+shift_size-1:4],tmp[4:shift_size-1]}; // ВОТ ТУТ! valid_o <= 1'b1; end 2 : begin data_o <= buffer[shift_size +:6]; tmp <= buffer[11:7]; valid_o <= 1'b1; end default : begin data_o <= data_o; valid_o <= 1'b0; end endcase end SYNC_MODE_ZERO : begin case (cnt) 1 : begin data_o <= buffer[7:2]; end 2 : begin data_o <= buffer[5:0]; end default : begin data_o <= data_o; valid_o <= 1'b0; end endcase end default : data_o <= data_o; endcase end end always_ff @(posedge clk_i or negedge arst_n) begin : proc_synced_o if(~arst_n) begin synced_o <= 1'b0; end else if ( match ) begin synced_o <= 1'b1; end end endmodule
  8. Доброго времени! Прошу совета у сообщества. "Сам я в верилог недавно". Пытаюсь таким образом: `timescale 1 ps / 1 ps module sram_adapter #(parameter gp_SRAM_D_WIDTH = 8, parameter gp_SRAM_A_WIDTH = 12, parameter gp_SRAM_WORD_SIZE = 1<<gp_SRAM_A_WIDTH) ( input [(gp_SRAM_D_WIDTH-1):0] i_d0, input [(gp_SRAM_D_WIDTH-1):0] i_d1, input [(gp_SRAM_A_WIDTH-1):0] i_add0, input[(gp_SRAM_A_WIDTH-1):0] i_add1, input[(gp_SRAM_A_WIDTH-1):0] i_add2, input i_clock, input i_add0bus_sel, input i_add1bus_sel, input i_add2bus_sel, input i_rden0, input i_rden1, input i_wren0, input i_wren1, input i_noe_uc, input i_nwe_uc, input i_ncs_uc, input [(gp_SRAM_A_WIDTH-1):0] i_add_uc, output wire[(gp_SRAM_D_WIDTH-1):0] o_d0, output wire [(gp_SRAM_A_WIDTH-1):0] o_add, inout [(gp_SRAM_D_WIDTH-1):0] io_d_uc, output dbg0, output dbg1, output dbg2 ); reg [(gp_SRAM_A_WIDTH-1):0] r_a; reg[(gp_SRAM_D_WIDTH-1):0] r_d; reg[(gp_SRAM_D_WIDTH-1):0] r_q; assign o_add = r_a; assign o_d0 = r_q; reg [3:0]r_bus_mux_sel, r_we, r_oe; assign dbg0 = (r_oe); assign dbg1 = (r_we); assign dbg2 = |r_bus_mux_sel; reg [gp_SRAM_D_WIDTH:0] sram[(gp_SRAM_WORD_SIZE-1):0]; initial begin r_a = 0; r_q = 0; r_oe = 0; r_we = 0; end // Tri-State Buffer control assign io_d_uc = (r_bus_mux_sel[3] && !i_noe_uc && i_nwe_uc) ? r_q: 8'bz; always @(negedge i_clock) begin r_bus_mux_sel[3] <= !i_ncs_uc; r_bus_mux_sel[0] <= i_add0bus_sel; r_bus_mux_sel[1] <= i_add1bus_sel; r_bus_mux_sel[2] <= i_add2bus_sel; end always @(posedge i_clock) begin if(r_we) sram[r_a] <= r_d; if(r_oe) r_q <= sram[r_a]; end localparam lp_TX1BUF_ADD_OFFSET = 12'd16, lp_RX1BUF_ADD_OFFSET = 12'd96; always @(i_add_uc or i_add0 or i_add1 or i_add2 or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_a = i_add0; 4'd2: r_a = i_add1 + lp_TX1BUF_ADD_OFFSET; 4'd4: r_a = i_add2 + lp_RX1BUF_ADD_OFFSET; 4'b1xxx: r_a = i_add_uc; default: r_a = 12'd4095; endcase end always @(i_d0 or i_d1 or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_d = i_d0; 4'd4: r_d = i_d1; 4'b1xxx: r_d = io_d_uc; default: r_d = 0; endcase end always @(i_wren0 or i_wren1 or i_nwe_uc or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_we = i_wren0; 4'd4: r_we = i_wren1; 4'b1xxx: r_we = !i_nwe_uc; default: r_we = 0; endcase end always @(i_rden0 or i_rden1 or i_noe_uc or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_oe = i_rden0; 4'd2: r_oe = i_rden1; 4'b1xxx: r_oe = (!i_noe_uc && i_nwe_uc); default: r_oe = 0; endcase end endmodule К памяти подключен внешний МК: i_noe_uc, input i_nwe_uc, input i_ncs_uc, i_add_uc, io_d_uc и внутренние "читатели/писатели"(1 писатель/читатель, 1 читатель, 1 писатель). Результат использования такой: - синтезируется ОЗУ, запрошенного объема 4096 байт; - тесты записи/чтения по всему объему со стороны МК проходят успешно; - внутренние "читатели/писатели" читают и пишут успешно; НО, как-будто это две разные ОЗУ. Т.е. если записать МК какие-либо данные в определенный адрес (диапазон адресов), то внутренний читатель вычитывает с этого адреса (адресов) исключительно, то, что туда записывает внутренний писатель. Равно как и МК вычитывает, только то, что сам записал.
  9. Здравствуйте, пишу свой первый проект на ПЛИС (verilog, max10), проект создаю в учебных целях. Создал систему в Qsys: nios, память(sdram), Jtag, и самописный компонент. Внутри самописного компонента, с просторов интернета контроллер памяти sdram(отдельно от памяти nios), счетчик и DCFIFO для передачи из счетчика на sdram. Nios запускает счетчик, тот в считает до оперделенного числа, и записывает в FIFO, оттуда контроллер sdram забирает данные и пишет в память. Nios и счетчик работают на 100Мгц, sdram и память на 125Мгц, FIFO двухклоковое на запись 100 Мгц на чтение 125 Мгц. На симуляции все работает отлично но в железе появляются проблемы констрейнов. В assigment поставил sdram выводам fast IO, клоки сделал Global Clock. Sdram для Nios работет timequest не ругается, а в моем компоненте постоянно ошибки памяти и я не могу понять почему такие большие слаки. Память микрон MT48LC16M16A2. На nios память микрон MT48LC4M32B2. Констрейны nios sdram Констрейны контроллера Общая картина: Клок Nios sdram Sdram внутри компонента. Не могу понять причину почему sdram внутри моего компонента так отличается от sdram используемого nios. Уже 2 недели бьюсь, может кто-то подскажет? Исходник компонента прилагаю. src.sv
  10. Приветствую уважаемые посетители форума. Решил изучить verilog(SystemVerilog) на уровне большем чем "читаю и плачу". Написал простенький проектик, запустил проверку синтаксиса в modelsim. И с ужасом обнаружил у себя ошибку. И ужаснулся я не от того, что у меня ошибка ( в конце концов я не волшебник, а только учусь). А ужаснулся я от того, что у меня один сигнал имел несколько драйверов, и modelsim даже не пискнул об этом, гад такой. В vhdl можно было применить unresolved тип, и горя не знать. Хотя в последнее время, применение любого типа, отличного от std_logic_vector - это потенциальные проблемы, т.к почти все, сгенерированное vivado, понимает только этот гадский тип, посему всю красоту строгой типизации в vhdl можно даже и не пытаться применять, т.к написание " прокладок" занимает неадекватно много времени... Так, вот если по теме: как такие ошибки(несколько драйверов у сигнала) обнаружить в verilog, ну или на худой конец как заставить modelsim истошно вопить об этом ? P.S. За орфографию сильно не ругайте, тыкаю одним пальцем в телефон, трясясь в автобусе...
  11. Здравствуйте, уважаемве. Я в квартусе 18 создаю мегафункцию ROM - однопортовую, простую с инициализированой памятью. Квартус не хочет автоматически создавать ром в on-chip memory, за сим приходится использовать мегу. Потом я достаю данные из нее как: wire signed [32-1 : 0] coefsC; rom470 rom(caddr, clk,coefsC); always @(posedge clk) if (reset_n == 0) cc <= 0; else cc <= coefsC; и мне оч хочется это в модельсиме просимулировать. Я не знаю как квартуса мегу впихнуть в модельсим, за сим я пишу так: reg signed [32-1 : 0] coefsC [0:479]; initial $readmemh("coefs470.txt", coefsC); always @(posedge clk) if (reset_n == 0) cc <= 0; else cc <= coefsC[caddr]; Будет ли второй, "ручной" вариант, эквивалентен мегафункции в железе. Заранее благодарен