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

 
 
> 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 8 2013, 11:58
Сообщение #2


Гуру
******

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



Блин ничего не понимаю, в чем я ошибся, или что то совсем ничего не понимаю, вроде такая простая вещь а не работает как нужно (.
Весь подсчет разбил что бы было удобнее искать проблему, но ничего так и не нашел. Взял проверенный алгоритм на C#
Код
        {
            int crc = 0xFFFF;
            byte[] msg = new byte[6];
            msg[0] = 0x24;
            msg[1] = 0x08;
            msg[2] = 0x00;
            msg[3] = 0x00;
            msg[4] = 0x00;
            msg[5] = 0x00;

            for (int j = 0; j < 6; j++)
            {
              

                crc = crc ^ msg[j];

                for (int i = 0; i < 8; i++)
                {

                    bool ff =  (crc & 1)==1;
                    crc = crc >> 1;

                    if (ff)
                    {
                        crc = crc ^ 0xA001;
                    }                    

                }
              
            }
        }

Результат получается правильный 0X3EE7.
Переписал практически один в один под Verilog, обмен с модулем crc_mobus проверил 10 раз все работает.
Результат правильный но сдвинут 0X003E. Почему так получается куда смотреть уже мыслей нет.
Код
//---------------------------------------------------------------------//
//---------------------------------------------------------------------//
module crc_mobus(input clck, input datacrcini,input datacrcnew, input[7:0]datain, output[15:0] crcout, output crcrd);
//---------------------------------------------------------------------//
//---------------------------------------------------------------------//
reg[15:0] countcrc      = 0;
reg[3:0] counterbytes   = 0;
reg[3:0] statucountcrc  = 0;

reg crcrdy     = 0;
reg loaddata   = 0;
reg bitlsb     = 0;
//---------------------------------------------------------------------//
//---------------------------------------------------------------------//
always @(posedge clck)
begin
    if(datacrcini)
    begin
        
        crcrdy          = 0;
        loaddata        = 0;
        statucountcrc   = 0;
        counterbytes    = 0;    
        countcrc[15:0]  = 16'b1111111111111111;
    end
    else if(datacrcnew) begin    
        if(loaddata == 0)
        begin
            loaddata      = 1;    
            crcrdy        = 0;
            counterbytes  = 0;                        
            countcrc[15:0] = {8'b00000000,datain[7:0]} ^countcrc[15:0];
            statucountcrc = 0;
        end
    end
    else begin        
        
        if(counterbytes < 8)
        begin
        
            case(statucountcrc)
            0:
            begin
                bitlsb = countcrc[0];
                statucountcrc = 1;
            end
            
            1:
            begin    
                countcrc  = countcrc>>1;                
                statucountcrc = 2;
            end
            
            2:
            begin
                if(bitlsb)
                begin
                    countcrc = countcrc ^ 16'b 1010000000000001;
                end                
                counterbytes  = counterbytes +1;
                statucountcrc = 0;                
            end
            
            default:
            begin
                statucountcrc = 0;
            end
            endcase    
            
        end
        else begin                
            crcrdy = 1;
            loaddata = 0;
        end
        
    end
    
end
//---------------------------------------------------------------------//
//---------------------------------------------------------------------//

assign crcout = countcrc;
assign crcrd  = crcrdy;
    
endmodule
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   Пробовал реверс бит результат не совпадает (. С ...   Nov 4 2013, 16:20
|- - Джеймс   Код always @(posedge clk, posedge rst) beg...   Nov 5 2013, 06:30
- - sergey sva   Может я что то не правильно понимаю для подсчета c...   Nov 7 2013, 11:02
- - sergey sva   ...   Nov 7 2013, 15:54


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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:40
Рейтинг@Mail.ru


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