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

Как подключать Блоки IP к проектам( в коде ) и к друг другу (например IP core к друг другу( FFT к Complex Multipler))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

к IP коре обычно еще идет шаблон подключения на VHDL и Verilog. Оттуда копируете, и назначете сигналы.

в ксалинксе выбрать IPCore в окне файлов проекта, внизу COREGenerator открыть внизу HDLTeamplate

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

еще один вопрос. как заполнить м- последовательностью ПЗУ ПЛИС. ? ну тоесть я могу в регистр залить последовательность так что бы потом она там всегда была ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

еще один вопрос. как заполнить м- последовательностью ПЗУ ПЛИС. ? ну тоесть я могу в регистр залить последовательность так что бы потом она там всегда была ?

Можно инициализировать регистр в initial блоке

reg[3:0] rom [0:7];

initial begin
rom[0] = 4'b1011;
rom[1] = 4'b0001;
rom[2] = 4'b0011;
rom[3] = 4'b0010;
rom[4] = 4'b1110;
rom[5] = 4'b0111;
rom[6] = 4'b0101;
rom[7] = 4'b0100;
end

 

UPD: ну только если в дальнейшем вы обязуетесь нигде не присваивать новых значений двумерному массиву rom :)

UPD2: да и в правду чего жадничать , есть такой документ под названием 1364.1 IEEE Standard for Verilog ® Register Transfer Level Synthesis там в параграфе 5.6 Modeling read-only memories (ROM) собственно можно посмотреть примеры моделирования ROM памяти при помощи Verilog

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы ведь уже используете ip cores? Вот и поставьте память готовую. Она инициализируется файлом текстовым.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

В дополнение к комментарию Swup.

При создании ip ROM укажите, что будете использовать файл инициализации.

Пример файла packets_block_mem_b.coe

packets_block_mem_b.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! вот тут еще один вопрос по коду пытаюсь сделать регистр сдвига вот таким образом. а где касячу не пойму (( картинки прилагаются

https://psv4.vk.me/c612920/u18277687/docs/7...VKSDVVGRJmjKd15

 

https://psv4.vk.me/c612920/u18277687/docs/8...KMAxHaO8yIuwc8I

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас входные и выходные слова 10 битные, а при этом сдвиговый регистр - массив однобитных слов.

Вам нужно reg [9:0] shift [N-1;0] ( да, в основном принято младшие разряды держать справа)

 

Во вторых. Не особо понятно зачем усложнять все generate если можно просто сделать в цикле в always.

 

В третьих. Вы уверены, что при сбросе хотите занулить только первое слово, а не весь регистр?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В третьих. Вы уверены, что при сбросе хотите занулить только первое слово, а не весь регистр?

да как раз хочу обнулить весь только не как не пойму как .

 

ща попробую все исправить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да как раз хочу обнулить весь только не как не пойму как .

 

ща попробую все исправить

подсказка - у регисра есть вход ресет (в описании тоже самое)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Исправил все скомпелировалось но похожу я опять что то не то сделал. ((((

 

https://pp.vk.me/c625623/v625623687/33fb1/tXP6fOq62cM.jpg

 

выпадает такая ошибка

 

https://pp.vk.me/c625623/v625623687/33fc3/4zHYuljfmFE.jpg

 

 

 

тест бенч

module TEStbench;

 

// Inputs

reg clk;

reg ce;

reg rst;

reg [15:0] d_in;

genvar i;

// Outputs

wire [15:0] d_out;

wire [15:0] filter_out;

 

// Instantiate the Unit Under Test (UUT)

line uut (

.clk(clk),

.ce(ce),

.rst(rst),

.d_in(d_in),

.d_out(d_out),

.filter_out(filter_out)

);

 

initial

begin

 

clk = 0;

end

always

#50 clk = ~ clk;

event reset_trigger; //объявление событий

event reset_done_trigger; //

 

//блок формирования Reset

initial begin

forever begin //бесконечный цикл

@ (reset_trigger); //ждем события reset_trigger

@ (posedge clk); //ждем clk

rst = 1;

ce =0 ;

d_in = 16'd00 ;

//сброс

@ (posedge clk);

rst = 0;

-> reset_done_trigger; //сигналим что reset выполнен

end

end

 

//Ход симуляции

initial

begin: TEST_CASE

#10 -> reset_trigger; //делаем ресет с задержкой 10

@ (reset_done_trigger); //ждем сигнал reset_done_trigger

@ (posedge clk);

ce = 1; //разрешаем счет

d_in = 16'd9 ;

 

 

repeat (10) begin //цикл на 5 повторений

@ (posedge clk); //ждем clk

end

ce= 0; //запрещаем счет

end

endmodule

 

Во вторых. Не особо понятно зачем усложнять все generate если можно просто сделать в цикле в always.

 

через always не получается.. щас пробую...ни не пойму

 

я сделал бред. посмотрел RTL схему. но черт возьми насчет ресета и правдо не могу сообразить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

через always не получается.. щас пробую...ни не пойму

Выложите код line.v в виде кода, а то смотреть и редактировать неудобно. У Вас в конце отсутствует end и сам always в строчках 42-46 описан не совсем корректно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выложите код line.v в виде кода, а то смотреть и редактировать неудобно. У Вас в конце отсутствует end и сам always в строчках 42-46 описан не совсем корректно.

`timescale 1ns / 1ps

module line(input clk,
input ce,
input rst,
//input LD_psp,
//input psp,
input [15:0] d_in,
output [15:0] d_out
//output [15:0] filter_out
// output reg psp_o
);

parameter depth_select_bits = 10;
parameter data_width = 16;

wire [data_width-1:0] data_in, data_out; 
reg [data_width-1:0] shift_reg [depth_select_bits-1:0];

assign d_out = shift_reg[depth_select_bits-1];

//reg [data_width-1:0] sum = 0;

always @(posedge clk)
if(rst)
shift_reg[i] <= 0;
else if (ce)
shift_reg[i] <= d_in;

genvar i;
generate
for (i=1; i < depth_select_bits-1; i=i+1) 
begin: p1
always @(posedge clk) 

if (ce)
shift_reg[i] <= shift_reg[i-1];
end
endgenerate

//always @(posedge clk)
//begin
// if (ce)
// begin : summ
// integer j1;
// sum = 0;
// for (j1 = 0; j1 < depth_select_bits; j1 = j1 + 1)
// begin
// sum = sum + shift_reg[j1];
// end
// end
//end

//assign filter_out = sum;


endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примерно так:

always @(posedge clk)
    begin
    for (i=0; i<N; i=i+1)    
        shiftreg[i+1] <= shiftreg[i];

    shiftreg[0] <= IN;
    OUT <= shiftreg[N];
    end

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...