doublekey
Свой-
Постов
71 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о doublekey
-
Звание
Участник
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
-
Тут, похоже, вопрос в том, что в Synplify нет поддержки XC4000EX, при синтезе нужно выбирать аналогичный XC4000XL.
-
А если дописать пару строчек: module h2d ( input clock, // System clock input. input signal, // Start signal input. output pulse // Generated pulses output. ); parameter PULSE_COUNT = 1; // Number of output pulses. localparam PULSE_COUNT_W = $clog2(PULSE_COUNT) + 1; // Pulse counter width. reg signal_reg; // Start signal detection register. reg [PULSE_COUNT_W:0] pulse_cntr; // Output pulses counter. logic start; // Start pulses generation. assign start = signal & ~signal_reg; always_ff @(posedge clk) signal_reg <= signal; always_ff @(posedge clk) if (start) signal_cntr <= '0; else if (~signal_cntr[$high(signal_cntr)]) signal_cntr <= signal_cntr + 1; assign pulse = signal_cntr[0]; endmodule
-
Правильнее анализировать состояние signal по фронту clock, и в случае если обнаружена смена состояния из 0 в 1, начинать формирование импульсов. Формирование 1 импульса по приходу signal: module h2d ( input clock, input signal, output pulse ); reg signal_reg; always_ff @(posedge clk) signal_reg <= signal; assign pulse = signal & ~signal_reg; endmodule Если сигнал signal асинхронен отностиельно clock, то необходимо добавить два дополнительных триггера для предотвращения возникновения метастабильного состояния на входе. По желанию pulse можно сделать регистром, тогда выход будет привязан к clock.
-
При работе с памятью программ один такт требуется, чтобы защёлкнуть выставленный ядром адрес в rom.addr_reg, плюс задержка на установление данных на выходе памяти ещё один такт, вроде бы так. Во всяком случае у меня с меньшим WAIT_VAL не работало на симуляторе.
-
Делаю как-то так: module core8051 ( input clk, input cpu_nrst, MEM_if MEM_IF ); CORE8051S #( ... .STRETCH_VAL (1), // Number of wait cycles for data memory. .VARIABLE_STRETCH (0), // Use fixed number of cycles for data memory access. .VARIABLE_WAIT (0), // Use fixed number of cycles for program memory access. .WAIT_VAL (1), // Number of wait cycles for program memory .INTRAM_IMPLEMENTATION(0), // Use block RAM for internal RAM implementation. .FAMILY (15) // FPGA faily: ProASIC3. ) CPU_CORE ( ... .CLK (clk), .NSYSRESET(cpu_nrst), .PRESETN (), .WDOGRES (1'b0), .WDOGRESN (), .INT0 (1'b0), .INT1 (1'b0), .MOVX (), // Memory bus .MEMPSACKI(1'b1), .MEMACKI (1'b1), .MEMDATAI (MEM_IF.data), .MEMDATAO (), .MEMADDR (MEM_IF.addr), .MEMPSRD (), .MEMWR (), .MEMRD (), ); endmodule module rom ( input clk, // Clock input. ROM_if ROM_IF, // Programming interface for initialization. MEM_if MEM_IF // System data bus. ); import definitions::*; reg [ROM_DATA_WIDTH - 1:0] mem [ROM_DEPTH - 1:0]; // ROM. reg [ROM_ADDR_WIDTH - 1:0] addr_reg; // Read address register. assign MEM_IF.data = mem[addr_reg]; always_ff @(posedge clk) begin addr_reg <= MEM_IF.addr[ROM_ADDR_WIDTH - 1:0]; if (ROM_IF.we) mem[ROM_IF.addr] <= ROM_IF.data; end endmodule Соответственно, после включения питания специальный автомат грузит программу из внешней EEPROM (I2C/SPI) в эту память и потом снимает reset для ядра.
-
Пару слов про SV package definitions; parameter cons1 = 8; endpackage ... import definitions::cons1; always @ (posedge clk) parallel_data = {serial_data, parallel_data[cons1-1:1]};
-
Первое, что настораживает, это то, что в качестве источника выбран External I/O, а на верхнем уровне clock заведён не только на PLL, но ещё и на счётчик, вроде как генератор PLL пихает входной буфер в такой конфигурации внутрь модуля PLL_075MHZ. Ещё не понятно, что подаётся на buttom_in[1:0]. Пробовали отсимулировать?
-
STK600 платы расширения
doublekey ответил lisstret тема в MCS51, AVR, PIC, STM8, 8bit
Так сделайте себе несколько макетных платок, размеры и типы разъёмов же есть, и размещайте на ней всё что вам нужно, и проводов будет меньше. -
STK600 платы расширения
doublekey ответил lisstret тема в MCS51, AVR, PIC, STM8, 8bit
У Atmel есть документ в котором они пишут тип разъёмов и их распиновку, а также говорят, что Сам Atmel под них ничего не делает, у сторонних фирм готового тоже ничего не встречал. -
8-битный компаратор на Verilog
doublekey ответил Neadequant тема в В помощь начинающему
Вы описали асинхронную схему, а по условию задачи вроде бы нужна синхронная. Поэтому, следует добавить вход частоты синхронизации, назвав его, например, clk, описать выходы как reg, а также добавить always @(posedge clk). -
Sinplify
doublekey ответил TRILLER тема в Среды разработки - обсуждаем САПРы
Наверное, syn_keep для sum не даёт его заоптимизировать, если его убрать, результаты лучше? -
Art55555, принимал данные по параллельной DDR шине с AD6657 на частоте 200 МГц, но там немного другой формат. Попробуйте, у вас же есть железка.
-
Synplify вот что говорит: Performance Summary ******************* Worst slack in design: -0.441 Requested Estimated Requested Estimated Clock Clock Starting Clock Frequency Frequency Period Period Slack Type Group ------------------------------------------------------------------------------------------------------------------------- ltc2195_rx|dco 1000.0 MHz 531.2 MHz 1.000 1.883 -0.441 inferred Autoconstr_clkgroup_0 ================================================================================ =========================================
-
module ltc2195_rx ( input rst, // Reset input. input dco, // Clock input. input fr, // Frame sync signal. input [ 3:0] rxd, // Serial data. output reg [15:0] data, // Parallel data. output reg done // Data recieved flag. ); reg [1:0][3:0] data_p; // Positive edge data. reg [1:0][3:0] data_n; // Negative edge data. always_ff @(negedge dco, posedge rst) if (rst) data_n[1:0] <= '0; else data_n[1:0] <= {data_n[0], rxd}; // Recieve data at negative edge. always_ff @(posedge dco, posedge rst) if (rst) begin data_p <= '0; data <= '0; done <= '0; end else begin data_p[1:0] <= {data_p[0], rxd}; // Recieve data at positive edge. if (fr) // Store data to output register. {data[15], data[14], data[ 7], data[ 6], data[13], data[12], data[ 5], data[ 4], data[11], data[10], data[ 3], data[ 2], data[ 9], data[ 8], data[ 1], data[ 0] } <= {data_p[1], data_n[1], data_p[0], data_n[0]}; done <= fr; // Set recieved flag. end endmodule И читать данные из выходного регистра по сигналу done.