#fifo
всегда @(*) begin
если (posedge clk или posedge reset) begin
если (reset) begin
wr_ptr <= 0;
rd_ptr <= 0;
full <= 0;
empty <= 1;
end else если (we) begin
mem[wr_ptr] <= wr_data;
wr_ptr <= wr_ptr + 1;
если (wr_ptr == DEPTH - 1)
wr_ptr <= 0;
если (wr_ptr == rd_ptr)
full <= 1;
end
end
еще_если (we) begin
mem[wr_ptr] <= wr_data;
wr_ptr <= wr_ptr + 1;
если (wr_ptr == DEPTH - 1)
wr_ptr <= 0;
если (wr_ptr == rd_ptr)
full <= 1;
end
end
конецмодуля
если (re && !full) begin
rd_data <= mem[rd_ptr];
rd_ptr <= rd_ptr + 1;
если (rd_ptr == DEPTH - 1)
rd_ptr <= 0;
если (wr_ptr == rd_ptr)
empty <= 1;
конец
еще_если (!we && re) begin
empty <= 1;
конец
конец
конецмодуля
Эти примеры описывают синхронный и асинхронный FIFO на языке Verilog. Устройство: ALTERA EP4CEF17C8 Программное обеспечение: Quartus Prime 16.0 синхронный FIFO и асинхронный FIFO
8*8 синхронный FIFO; вы можете изменить самостоятельно;
Пожалуйста, сделайте глубину в виде 2^n, иначе измените функцию clog2;
Если ваше устройство не является ep4cef17c8, пожалуйста, проверьте, есть ли у вашего устройства ресурсы M9K.
Иначе измените:
(* ramstyle = "M9K" *) reg [WIDTH-1:0] memory [0:DEPTH-1];
на правильную память;
Или просто используйте ресурсы dff:
reg [WIDTH-1:0] memory [0:DEPTH-1];
8*8 асинхронный FIFO; вы можете изменить самостоятельно;
Пожалуйста, сделайте глубину в виде 2^n, так как используется код Грея для перехода между доменами;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )