radistka 0 27 мая, 2011 Опубликовано 27 мая, 2011 (изменено) · Жалоба В Platform Studio создала свой образец через Create and Import Peripheral Wizard общающийся по шине AXI4-Lite , при этом ставлю галку чтобы user_logic генерировался на verilog вместо vhdl. Ниже прикрепила полученные vhdl-код и user_logic для своего образца. Здесь добавлены сигналы LEDs и реализован счетчик, работающий после записи в 0 регистр '1'. Посылаю '1' через XMD Console , но она не записывается! в 1 регистр записано значение внутри кода 0x40, которое я благополучно считываю через консоль, связь есть, но запись данных почему-то не происходит. Тот же проект, сделанный на vhdl, работает, 0-регистр успешно пишется...в чем разница и какие ошибки могут быть в verilog-проекте? module user_logic ( // -- ADD USER PORTS BELOW THIS LINE --------------- LEDs, // -- ADD USER PORTS ABOVE THIS LINE --------------- // -- DO NOT EDIT BELOW THIS LINE ------------------ // -- Bus protocol ports, do not add to or delete Bus2IP_Clk, // Bus to IP clock Bus2IP_Resetn, // Bus to IP reset Bus2IP_Data, // Bus to IP data bus Bus2IP_BE, // Bus to IP byte enables Bus2IP_RdCE, // Bus to IP read chip enable Bus2IP_WrCE, // Bus to IP write chip enable IP2Bus_Data, // IP to Bus data bus IP2Bus_RdAck, // IP to Bus read transfer acknowledgement IP2Bus_WrAck, // IP to Bus write transfer acknowledgement IP2Bus_Error // IP to Bus error response // -- DO NOT EDIT ABOVE THIS LINE ------------------ ); // user_logic // -- ADD USER PARAMETERS BELOW THIS LINE ------------ // --USER parameters added here // -- ADD USER PARAMETERS ABOVE THIS LINE ------------ // -- DO NOT EDIT BELOW THIS LINE -------------------- // -- Bus protocol parameters, do not add to or delete parameter C_SLV_DWIDTH = 32; parameter C_NUM_REG = 2; // -- DO NOT EDIT ABOVE THIS LINE -------------------- // -- ADD USER PORTS BELOW THIS LINE ----------------- output [3:0] LEDs; // -- ADD USER PORTS ABOVE THIS LINE ----------------- // -- DO NOT EDIT BELOW THIS LINE -------------------- // -- Bus protocol ports, do not add to or delete input Bus2IP_Clk; input Bus2IP_Resetn; input [C_SLV_DWIDTH-1 : 0] Bus2IP_Data; input [C_SLV_DWIDTH/8-1 : 0] Bus2IP_BE; input [C_NUM_REG-1 : 0] Bus2IP_RdCE; input [C_NUM_REG-1 : 0] Bus2IP_WrCE; output [C_SLV_DWIDTH-1 : 0] IP2Bus_Data; output IP2Bus_RdAck; output IP2Bus_WrAck; output IP2Bus_Error; // -- DO NOT EDIT ABOVE THIS LINE -------------------- //---------------------------------------------------------------------------- // Implementation //---------------------------------------------------------------------------- // --USER nets declarations added here, as needed for user logic reg [3:0] LEDs; reg [4:0] count; reg [8:0] MyT; // Nets for user logic slave model s/w accessible register example reg [C_SLV_DWIDTH-1 : 0] slv_reg0; reg [C_SLV_DWIDTH-1 : 0] slv_reg1; wire [1 : 0] slv_reg_write_sel; wire [1 : 0] slv_reg_read_sel; reg [C_SLV_DWIDTH-1 : 0] slv_ip2bus_data; wire slv_read_ack; wire slv_write_ack; integer byte_index, bit_index; initial begin LEDs[3:0] = 4'b0000; MyT=64; end // --USER logic implementation added here // ------------------------------------------------------ // Example code to read/write user logic slave model s/w accessible registers // // Note: // The example code presented here is to show you one way of reading/writing // software accessible registers implemented in the user logic slave model. // Each bit of the Bus2IP_WrCE/Bus2IP_RdCE signals is configured to correspond // to one software accessible register by the top level template. For example, // if you have four 32 bit software accessible registers in the user logic, // you are basically operating on the following memory mapped registers: // // Bus2IP_WrCE/Bus2IP_RdCE Memory Mapped Register // "1000" C_BASEADDR + 0x0 // "0100" C_BASEADDR + 0x4 // "0010" C_BASEADDR + 0x8 // "0001" C_BASEADDR + 0xC // // ------------------------------------------------------ assign slv_reg_write_sel = Bus2IP_WrCE[1:0], slv_reg_read_sel = Bus2IP_RdCE[1:0], slv_write_ack = Bus2IP_WrCE[0] || Bus2IP_WrCE[1], slv_read_ack = Bus2IP_RdCE[0] || Bus2IP_RdCE[1]; // implement slave model register(s) always @( posedge Bus2IP_Clk ) begin: SLAVE_REG_WRITE_PROC if ( Bus2IP_Resetn == 1 ) begin slv_reg0 <= 0; slv_reg1 <= 0; end else case ( slv_reg_write_sel ) 2'b10 : begin for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 ) if ( Bus2IP_BE[byte_index] == 1 ) for ( bit_index = byte_index*8; bit_index <= byte_index*8+7; bit_index = bit_index+1 ) slv_reg0[bit_index] <= Bus2IP_Data[bit_index]; end 2'b01 : for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 ) if ( Bus2IP_BE[byte_index] == 1 ) for ( bit_index = byte_index*8; bit_index <= byte_index*8+7; bit_index = bit_index+1 ) slv_reg1[bit_index] <= Bus2IP_Data[bit_index]; default :; endcase end // SLAVE_REG_WRITE_PROC // implement slave model register read mux always @( slv_reg_read_sel or slv_reg0 or slv_reg1 ) begin: SLAVE_REG_READ_PROC case ( slv_reg_read_sel ) 2'b10 : slv_ip2bus_data <= slv_reg0; 2'b01 : slv_ip2bus_data <= MyT; default : slv_ip2bus_data <= 0; endcase end // SLAVE_REG_READ_PROC // ------------------------------------------------------------ // Example code to drive IP to Bus signals // ------------------------------------------------------------ assign IP2Bus_Data = slv_ip2bus_data; assign IP2Bus_WrAck = slv_write_ack; assign IP2Bus_RdAck = slv_read_ack; assign IP2Bus_Error = 0; always @ ( posedge Bus2IP_Clk ) begin if (slv_reg0[0]) begin count <= count + 1; end; LEDs [3] = count [4]; LEDs [2] = count [3]; led_verilog.vhd user_logic.v Изменено 27 мая, 2011 пользователем radistka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndrewS6 0 27 мая, 2011 Опубликовано 27 мая, 2011 (изменено) · Жалоба В тексте модуля смущает вот какой момент: always @( posedge Bus2IP_Clk ) begin: SLAVE_REG_WRITE_PROC if ( Bus2IP_Resetn == 1 ) begin slv_reg0 <= 0; slv_reg1 <= 0; end else <...> Обычно в обозначениях сигналов дописывает букву "n" в конец, чтобы обозначить активный низкий уровень сигнала. Проверьте Bus2IP_Resetn - как реально производится сброс схемы - по высокому или по низкому уровню. Изменено 27 мая, 2011 пользователем AndrewS6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
radistka 0 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Спасибо большое! ларчик, действительно, так и открывался :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Koluchiy 0 30 мая, 2011 Опубликовано 30 мая, 2011 · Жалоба Если не секрет, почему Вы выбрали AXI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 31 мая, 2011 Опубликовано 31 мая, 2011 · Жалоба Если не секрет, почему Вы выбрали AXI? Это наше ВСЁ (перспектива). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться