egorman44 0 3 июня, 2015 Опубликовано 3 июня, 2015 · Жалоба Я бы Вам рекомендовал почитать что-нибудь от Sunburst Design - у этих ребят много рассуждений по поводу реализации конечного автомата на Verilog и SV, конечно если с английским хорошо. У Iosifk на сайте есть краткий курс , там тоже описаны FSM'ки. Да собственно по первому же запросу в Google на тему "fsm verilog" вывалился пример от Altera. Я думаю лучше самому понять как это работает, потому что конечный автомат - есть очень важный момент в цифровой схемотехнике. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NSergeevich 0 3 июня, 2015 Опубликовано 3 июня, 2015 (изменено) · Жалоба Я бы Вам рекомендовал почитать что-нибудь от Sunburst Design - у этих ребят много рассуждений по поводу реализации конечного автомата на Verilog и SV, конечно если с английским хорошо. У Iosifk на сайте есть краткий курс , там тоже описаны FSM'ки. Да собственно по первому же запросу в Google на тему "fsm verilog" вывалился пример от Altera. Я думаю лучше самому понять как это работает, потому что конечный автомат - есть очень важный момент в цифровой схемотехнике. :) Будьте добры не отсылайте меня в школу. У меня много литературы по верилогу, в том числе и о конечных автоматах. Мне интеречно где может быть у меня ошибка... Часть кода: parameter S1 = 1'b0; parameter S2 = 1'b1; parameter [7:0] DA1[0:0] = {8'b1111000}; parameter [7:0] DA2[0:4] = {8'b100100,8'b10101111,8'b111100,8'b1101110,8'b10101000};//{7'b1111000,6'b100100,8'b10101111,6'b111100,7'b1101110,8'b10101000}; parameter [7:0] SA[0:5] = {8'b11010,8'b11011,8'b11100,8'b11101,8'b11110,8'b11111};//{5'b11010,5'b11011,5'b11100,5'b11101,5'b11110,5'b11111}; parameter [7:0] L_T[0:1] = {8'b1000,8'b0}; parameter [7:0] DATA[0:47] = { 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010 }; parameter [7:0] frame[0:60] = {DA2[0:4], SA[0:5], L_T[0:1], DATA[0:47]}; always @(posedge handshake) begin got_handshake <= 1; end always @(*) begin if (counter_next > 1024) begin counter_next <= 0; end else counter_next <= counter + 1'b1; end reg [0:0] state, next_state; always@(*) begin if (rst) begin out <= 0; out2 <= 0; counter <= 0; state <= S1; end else case (state) S1 : begin out <= DA1[counter]; out2 <= 1'h1; next_state = got_handshake ? S2 : S1; counter <= counter_next; end S2 : begin out <= frame[counter]; out2 <= 1'h1; next_state = S1; counter <= 0; end endcase end Почемуто автомат не переходит во 2-е состояние (S2), судя по всему handshke не приходит. А должен так как первый byte на MAC приходит. Изменено 3 июня, 2015 пользователем NSergeevich Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 3 июня, 2015 Опубликовано 3 июня, 2015 · Жалоба У Вас тут асинхронщина какая-то: always@(*) Так точно работать не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artemius_tv 0 3 июня, 2015 Опубликовано 3 июня, 2015 · Жалоба Выложите весь исходник. Вот так: always @(posedge handshake) begin got_handshake <= 1; end точно нельзя делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NSergeevich 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 13:41:36 03/26/2015 // Design Name: // Module Name: tx_data // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module tdata( input clk, input rst, output [7:0]data, input handshake, output data_valid ); reg [31:0]counter; reg [31:0]counter_next; reg [7:0]out; reg out2; reg got_handshake; parameter S1 = 1'b0; parameter S2 = 1'b1; parameter [7:0] DA1[0:0] = {8'b1111000}; parameter [7:0] DA2[0:4] = {8'b100100,8'b10101111,8'b111100,8'b1101110,8'b10101000}; parameter [7:0] SA[0:5] = {8'b11010,8'b11011,8'b11100,8'b11101,8'b11110,8'b11111}; parameter [7:0] DATA[0:47] = { 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010, 8'b10101010,8'b10101010,8'b10101010 }; parameter [7:0] frame[0:60] = {DA2[0:4], SA[0:5], L_T[0:1], DATA[0:47]}; always @(handshake) begin got_handshake <= 1; end always @(posedge clk) begin if (counter_next > 1024) begin counter_next <= 0; end else counter_next <= counter + 1'b1; end reg [0:0] state, next_state; always@(*) begin if (rst) begin out <= 0; out2 <= 0; counter <= 0; state <= S1; end else case (state) S1 : begin out <= DA1[counter]; out2 <= 1'h1; next_state = (got_handshake == 1) ? S2 : S1; counter <= counter_next; end S2 : begin out <= frame[counter]; out2 <= 1'h1; next_state = S1; counter <= 0; end endcase end assign data = out; assign data_valid = out2; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба always @(posedge handshake) begin got_handshake <= 1; end Не уверен, что сигнал с названием handshake является тактовым. Вы в клоковое дерево вашей ПЛИС пытаетесь завести сигнал handshake так делать нельзя. Такое ощущение, что здесь вы хотите синтезировать защелку по сигналу handshake, так и синтезируйте, если очень конечно нужно: always @(*) if(handshake) got_handshake = 1; always @(*) begin if (counter_next > 1024) begin counter_next <= 0; end else counter_next <= counter + 1'b1; end reg [0:0] state, next_state; always@(*) begin if (rst) begin out <= 0; out2 <= 0; counter <= 0; state <= S1; end else case (state) S1 : begin out <= DA1[counter]; out2 <= 1'h1; next_state = got_handshake ? S2 : S1; counter <= counter_next; end S2 : begin out <= frame[counter]; out2 <= 1'h1; next_state = S1; counter <= 0; end endcase end очень странно, что вы пытаетесь сделать автомат и счетчик асинхронными, у Вас отсутствует кварц на плате ? :) Такой автомат работать не будет. Посмотрели бы пример от Altera хотяб: always @(posedge clk or posedge reset) begin if (reset) state = zero; else case (state) zero: state = one; one: if (in) state = zero; else state = two; two: state = three; three: state = zero; endcase end Откуда видно, что автомат из состояния в состояние переходит по переднему фронту clk, ну еще и асинхронно сбрасывается по reset. Я так думал что когда описываешь комбинаторную логику пользуешься блокирующим присваиванием (=). И собственно использовать оба типа присваивания в одном always блоке , тоже не особо приветствуется: S2 : begin out <= frame[counter]; out2 <= 1'h1; next_state = S1; counter <= 0; end Я так полагаю Вы не особо тщательно смотрели ваши книги по верилогу :) Для начала бы Вам разобраться в синтезе комбинаторной и последовательной логики (combinational and sequential logic) ну и с блокирующим и неблокирующим присвоением соответственно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NSergeevich 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Кому интересно, почитайте очень интересную статью на тему always @ Always.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
egorman44 0 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Кому интересно, почитайте очень интересную статью на тему always @ Always.pdf Ну и какой момент показался Вам самым интересным в этой статье ? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться