Nano Hash - криптовалюты, майнинг, программирование

Неподключенные порты - ошибка Verilog Synthesis

Я синтезирую свой RTL, но продолжаю получать сообщение об ошибке. Предупреждение: в дизайне «DasisyChain3» порт «m1_data[7]» не подключен ни к каким цепям (LINT-28). Я не уверен, почему он говорит мне это. Я включил все модули в свой проект, который представляет собой несколько упрощенную версию протокола SPI. У меня есть подчиненный мастер и модуль DaisyChain, который является моим главным модулем и представляет собой реализацию цепочки Daisy.

module DaisyChain3(output [7:0] s1_buff, s2_buff, s3_buff,
input EN, CLK, 
input [7:0] m1_data, s1_data, s2_data, s3_data);

    wire SCLK, CS, MOSI;
    wire s1_SOMI, s2_SOMI, s3_SOMI;

    SPIMaster m1(SCLK, CS, MOSI, EN, CLK, s3_SOMI, m1_data);
    SPISlave s1(s1_SOMI, s1_buff, MOSI, SCLK, CS, s1_data);
    SPISlave s2(s2_SOMI, s2_buff, s1_SOMI, SCLK, CS, s2_data);
    SPISlave s3(s3_SOMI, s3_buff, s2_SOMI, SCLK, CS, s3_data);

endmodule

module SPIMaster(output reg SCLK, CS, MOSI, 
input EN, CLK, MISO, 
input [7:0] m_data);
    wire master_out;
    reg [4:0] count,count1,count2;
    wire [7:0] data_buff;
    wire SCLK1;
    reg master_in, c_sw, k, state, load;
    reg k1,load1;
    shiftReg register_out (master_out, data_buff, load, (~SCLK1), master_in, m_data);
assign SCLK1 = (~c_sw) | CLK;
    always@(posedge CLK) begin
        if(state) begin
            if (k == 1) begin
                state <= 0;
                c_sw <= 0;
                CS <= 1;
                count <= 0;
                k <= 0;
                load <= 0;
            end
            else begin
                state <= 1;
                c_sw <= 1;
                CS <= 0;
            end
        end
        else begin
            if (EN) begin
                state <= 1;
                c_sw <= 1;
                CS <= 0;
                count <= 0;
                k <= 0;
                load <= 1;
            end
        end
            count <= count1;
            load <= load1;
            k <= k1;
    end
    always@(posedge SCLK1) begin
        load1 <= count;
        count1 <= count;
        if (CS == 0) master_in <= MISO;
        if (count1 == 7) begin
            load1 <= 0;
        end
        else if (count1 == 15)begin
            load1 <= 0;
        end
        else begin
            load1 <= 1;
        end
        count1 <= count2;
    end
    always@(negedge SCLK1) begin
        count2 <= count1;
        k1 <= k;
        if (count2 == 23) k1 <= 1;
        else k1 <= 0;
        if (CS == 0) begin
            MOSI <= master_out;
            count2 <= count2 + 1;
        end
    end
endmodule
module SPISlave(output reg SOMI, 
output [7:0] data_buff,
input SIMO, SCLK, CS, 
input [7:0] s_data);
    wire clk;
    reg slave_in;
    wire slave_out;
    shiftReg register_out (slave_out, data_buff, (~CS), clk, slave_in, s_data);
    assign clk = SCLK | CS;
    always@(posedge clk) begin
        slave_in <= SIMO;
    end
    always@(negedge clk) begin
        SOMI <= slave_out;
    end
endmodule

module shiftReg(output shift_out,
output reg [7:0] data_buff,
input shift_write, clk, shift_in,
input [7:0] data);

    reg [7:0] buffer;
    assign shift_out = buffer[7];
    assign buffer[0] = shift_in;
    always@(posedge clk) begin
        if(shift_write == 1) begin
            buffer <= {buffer[6:0],shift_in};
        end
    end
    always@(shift_write) begin
        if(shift_write == 0) begin
            data_buff <= buffer;
            buffer <= data;
        end
    end

endmodule

Ответы:


1

В своем предыдущем сообщении вы забыли опубликовать код для shiftReg. Он здесь, и в нем есть ошибка, которая, вероятно, ответственна за предыдущую проблему, а может быть, и за эту.

Ваша проблема в том, что у вас есть несколько (3) драйверов для buffer:

    assign buffer[0] = shift_in; <<< driver 1
    always@(posedge clk) begin
        if(shift_write == 1) begin
            buffer <= {buffer[6:0],shift_in}; <<< driver 2
        end
    end
    always@(shift_write) begin
        if(shift_write == 0) begin
            data_buff <= buffer;
            buffer <= data;  <<< driver 3
        end
    end

У вас есть флоп, защелка и комбинационная логика, управляющая одним и тем же сигналом. Вы должны убедиться, что сигнал управляется одним всегда блоком. В настоящее время у вас есть неопределенное поведение симуляции, перепутанный синтезатор и линтер (который также является синтезатором).

05.05.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..