реклама на сайте
подробности

 
 
> uart verilog
sergey sva
сообщение Oct 22 2013, 21:04
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Нужен uart с двумя сигналами rx tx , понимаю что не сложно сделать, может есть готовый? дайте ссылочку пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergey sva
сообщение Nov 4 2013, 16:20
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Пробовал реверс бит результат не совпадает (. С разными полиномами пробовал a001 8005.
Проверяю значения 0x24 0x08 0x00 0x00 0x00 0x00 CRC должно получиться 0x3EE7 а у меня 0x24d6, где ошибка ума нет. проверял на калькуляторе http://www.lammertbies.nl/comm/info/crc-calculation.html подскажите что нибудь?
Код
//-----------------------------------------------------------------------------
// Copyright (C) 2009 OutputLogic.com
// This source file may be used and distributed without restriction
// provided that this copyright statement is not removed from the file
// and that any derivative work contains the original copyright notice
// and the associated disclaimer.
//
// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED    
// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//-----------------------------------------------------------------------------
// CRC module for data[7:0] ,   crc[15:0]=1+x^13+x^15+x^16;
//-----------------------------------------------------------------------------
module crc_modbus(
  input [7:0] data_in,
  input crc_en,
  output [15:0] crc_out,
  input rst,
  input clk);

  reg [15:0] lfsr_q,lfsr_c;

  assign crc_out = lfsr_q;

  always @(*) begin
    lfsr_c[0] = lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[12] ^ lfsr_q[15] ^ data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[4] ^ data_in[7];
    lfsr_c[1] = lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[13] ^ data_in[1] ^ data_in[2] ^ data_in[3] ^ data_in[5];
    lfsr_c[2] = lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[14] ^ data_in[2] ^ data_in[3] ^ data_in[4] ^ data_in[6];
    lfsr_c[3] = lfsr_q[11] ^ lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[15] ^ data_in[3] ^ data_in[4] ^ data_in[5] ^ data_in[7];
    lfsr_c[4] = lfsr_q[12] ^ lfsr_q[13] ^ lfsr_q[14] ^ data_in[4] ^ data_in[5] ^ data_in[6];
    lfsr_c[5] = lfsr_q[13] ^ lfsr_q[14] ^ lfsr_q[15] ^ data_in[5] ^ data_in[6] ^ data_in[7];
    lfsr_c[6] = lfsr_q[14] ^ lfsr_q[15] ^ data_in[6] ^ data_in[7];
    lfsr_c[7] = lfsr_q[15] ^ data_in[7];
    lfsr_c[8] = lfsr_q[0];
    lfsr_c[9] = lfsr_q[1];
    lfsr_c[10] = lfsr_q[2];
    lfsr_c[11] = lfsr_q[3];
    lfsr_c[12] = lfsr_q[4];
    lfsr_c[13] = lfsr_q[5] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[12] ^ lfsr_q[15] ^ data_in[0] ^ data_in[1] ^ data_in[2] ^ data_in[4] ^ data_in[7];
    lfsr_c[14] = lfsr_q[6] ^ lfsr_q[9] ^ lfsr_q[10] ^ lfsr_q[11] ^ lfsr_q[13] ^ data_in[1] ^ data_in[2] ^ data_in[3] ^ data_in[5];
    lfsr_c[15] = lfsr_q[7] ^ lfsr_q[8] ^ lfsr_q[9] ^ lfsr_q[11] ^ lfsr_q[14] ^ lfsr_q[15] ^ data_in[0] ^ data_in[1] ^ data_in[3] ^ data_in[6] ^ data_in[7];

  end // always

  always @(posedge clk, posedge rst) begin
    if(rst) begin
      lfsr_q <= {16{1'b1}};
    end
    else begin
      lfsr_q <= crc_en ? lfsr_c : lfsr_q;
    end
  end // always
endmodule // crc
Go to the top of the page
 
+Quote Post
Джеймс
сообщение Nov 5 2013, 06:30
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 462
Регистрация: 20-01-06
Пользователь №: 13 399



Код
always @(posedge clk, posedge rst) begin
    if(rst) begin
      lfsr_q <= {16{1'b1}};
    end
    else begin
      lfsr_q <= crc_en ? lfsr_c : lfsr_q;
    end
  end // always


А сброс (rst) подается?
И здесь вообще говоря должен быть не только сброс при включении питания, поскольку так модуль отработает только один раз.

always @(posedge clk or posedge rst)
begin
if(rst) // power-up reset
lfsr_q[15:0] <= 16'hFFFF;
else
if (NEW_CRC)
lfsr_q[15:0] <= 16'hFFFF; // start new crc calculation
else
if (crc_en)
lfsr_q[15:0] <= lfsr_c[15:0];
end

И старайтесь указывать везде разрядности. Полезная привычка..
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sergey sva   uart verilog   Oct 22 2013, 21:04
- - aT-DeviLru   Может быть подойдёт Verilog UART с opencores? ссыл...   Oct 22 2013, 21:31
- - count_enable   На opencores.org их как грязи, если надо стандартн...   Oct 22 2013, 21:31
- - filo   как передавать по uart 18битные данные? Я так пон...   Oct 23 2013, 04:38
- - Swup   Я как-то использовал модули отсюда: http://www.fpg...   Oct 23 2013, 05:20
|- - filo   Цитата(Swup @ Oct 23 2013, 08:20) Я как-т...   Oct 23 2013, 07:31
- - count_enable   Сначала определитесь, хотите ли уарт, по которому ...   Oct 23 2013, 10:00
|- - iosifk   Цитата(count_enable @ Oct 23 2013, 14:00)...   Oct 23 2013, 10:57
|- - filo   Цитата(count_enable @ Oct 23 2013, 13:00)...   Oct 23 2013, 11:59
- - sergey sva   Спасибо и правда сразу заработало Нужен генератор...   Oct 23 2013, 15:47
- - Andrew Su   Добрый день. Посмотрите, может понравится. Удачи.   Oct 23 2013, 17:22
- - sergey sva   Столкнулся с проблемой, никак не разберусь почему ...   Oct 31 2013, 10:16
|- - Zig   Цитата(sergey sva @ Oct 31 2013, 14:16) C...   Oct 31 2013, 16:56
- - sergey sva   Сейчас проверю может в направлениях сигналов ошибс...   Oct 31 2013, 19:23
- - sergey sva   Может я что то не правильно понимаю для подсчета c...   Nov 7 2013, 11:02
- - sergey sva   ...   Nov 7 2013, 15:54
- - sergey sva   Блин ничего не понимаю, в чем я ошибся, или что то...   Nov 8 2013, 11:58


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 11:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01427 секунд с 7
ELECTRONIX ©2004-2016