Что можно сделать на FPGA?

Тема в разделе "WASM.BEGINNERS", создана пользователем Aoizora, 2 янв 2023.

  1. algent

    algent Active Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    104
    Про верхний уровень не в курсе. И новыми фишками я уже давно не интересовался. Раньше было много разговоров про systemC, но это не моё. Имхо, это концептуально хрень. В HDL описании, каждая строка типа "signalA = signalB AND signalС;" - это процесс. Параллельный остальным, таким же. Ну куда тут любому языку программирования ?
     
  2. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    362
    Пытаюсь реализовать несистематический кодер циклического кода. Написал такой код, но что-то последовательность генерируется совсем не так. Кто-то понимает, что я мог сделать не так?

    Кодер:

    Код (C++):
    1.  
    2. module hamming_coder_nonsystematic(
    3.     input logic clk,
    4.     input logic enable,
    5.     input logic in,
    6.     output logic out
    7. );
    8.     logic [3:0] s;
    9.     logic [3:0] counter = 4'b0000;
    10.  
    11.    always @(posedge clk)
    12.        if (enable)
    13.            counter <= counter + 1'h1;
    14.    
    15.     always @(posedge clk) begin
    16.         if (enable) begin
    17.             s[3] <= in;
    18.             s[2] <= s[3];
    19.             s[1] <= s[2];
    20.             s[0] <= s[1];
    21.         end else
    22.             s <= 4'b0000;
    23.        if (counter == 4'h0)
    24.             s <= 4'b0000;
    25.    end
    26.      
    27.    assign out = in ^ s[1] ^ s[0];
    28. endmodule
    29.  
    Тестбенч:

    Код (Text):
    1.  
    2. module hamming_coder_nonsystematic_tb();
    3.     logic clk;
    4.     logic enable;
    5.     logic in;
    6.     logic out;
    7.    
    8.     initial begin
    9.         clk = 0;
    10.         in = 0;
    11.         forever #5 clk = ~clk;
    12.     end
    13.    
    14.     hamming_coder_nonsystematic uut(clk, enable, in, out);
    15.    
    16.     initial begin
    17.         // Тест 11111000001
    18.         // Должно кодироваться в x^14+x^13+x^12+x^10+x^6+x^4+x+1 = 11101001010011
    19.         #1 enable = 1; #10
    20.         in = 1; #10
    21.         in = 1; #10
    22.         in = 1; #10
    23.         in = 1; #10
    24.         in = 1; #10
    25.         in = 0; #10
    26.         in = 0; #10
    27.         in = 0; #10
    28.         in = 0; #10
    29.         in = 0; #10
    30.         in = 1; #10
    31.         in = 0; #10
    32.         in = 0; #10
    33.         in = 0; #10
    34.         in = 0;
    35.         $stop;
    36.        
    37.         #1 enable = 1; #10
    38.         in = 1; #10
    39.         in = 0; #10
    40.         in = 0; #10
    41.         in = 0; #10
    42.         in = 0; #10
    43.         in = 0; #10
    44.         in = 1; #10
    45.         in = 1; #10
    46.         in = 1; #10
    47.         in = 1; #10
    48.         in = 1; #10
    49.         in = 0; #10
    50.         in = 0; #10
    51.         in = 0; #10
    52.         in = 0;
    53.         $stop;
    54.     end
    55.    
    56.     always @(posedge clk)
    57.         #2 $write(out);
    58. endmodule
    59.  
     

    Вложения:

    • 0.png
      0.png
      Размер файла:
      41,1 КБ
      Просмотров:
      128
  3. algent

    algent Active Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    104
    verylog не знаю(вроде это он?), но вроде вы пустили на вход толпу единиц. Верно?
    Зачем, имхо, лучше пустить кучу нулей, даже новичку будет проще анализировать столь простую последовательность в сдвиговом регистре и на выходе. Потом пускаете одинокую единицу, опять же проще и в регистре, и на выходе = in ^ s[1] ^ s[0]; Если косяк не найдётся, то потом уже парить мозги чуть более сложной, меняющейся ситуацией на трёхвходовом искл. ИЛИ.
    Имхо, конечно...