Перейти к содержанию
    

doublekey

Свой
  • Постов

    71
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о doublekey

  • Звание
    Участник
    Участник

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Тут, похоже, вопрос в том, что в Synplify нет поддержки XC4000EX, при синтезе нужно выбирать аналогичный XC4000XL.
  2. А если дописать пару строчек: 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
  3. Правильнее анализировать состояние 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.
  4. При работе с памятью программ один такт требуется, чтобы защёлкнуть выставленный ядром адрес в rom.addr_reg, плюс задержка на установление данных на выходе памяти ещё один такт, вроде бы так. Во всяком случае у меня с меньшим WAIT_VAL не работало на симуляторе.
  5. Делаю как-то так: 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 для ядра.
  6. Пару слов про SV package definitions; parameter cons1 = 8; endpackage ... import definitions::cons1; always @ (posedge clk) parallel_data = {serial_data, parallel_data[cons1-1:1]};
  7. Первое, что настораживает, это то, что в качестве источника выбран External I/O, а на верхнем уровне clock заведён не только на PLL, но ещё и на счётчик, вроде как генератор PLL пихает входной буфер в такой конфигурации внутрь модуля PLL_075MHZ. Ещё не понятно, что подаётся на buttom_in[1:0]. Пробовали отсимулировать?
  8. Так сделайте себе несколько макетных платок, размеры и типы разъёмов же есть, и размещайте на ней всё что вам нужно, и проводов будет меньше.
  9. У Atmel есть документ в котором они пишут тип разъёмов и их распиновку, а также говорят, что Сам Atmel под них ничего не делает, у сторонних фирм готового тоже ничего не встречал.
  10. Вы описали асинхронную схему, а по условию задачи вроде бы нужна синхронная. Поэтому, следует добавить вход частоты синхронизации, назвав его, например, clk, описать выходы как reg, а также добавить always @(posedge clk).
  11. Наверное, syn_keep для sum не даёт его заоптимизировать, если его убрать, результаты лучше?
  12. Art55555, принимал данные по параллельной DDR шине с AD6657 на частоте 200 МГц, но там немного другой формат. Попробуйте, у вас же есть железка.
  13. 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 ================================================================================ =========================================
  14. 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.
×
×
  • Создать...