FPGA|CPLD|ASIC论坛
直播中

jf_61930648

2年用户 3经验值
擅长:可编程逻辑
私信 关注
[问答]

CPLD并口通信的程序-Verilog语言

module project(
input wire clk,
input wire reset_n,
input wire [7:0] plx_data_in,
input wire [3:0] plx_addr_in,
output reg [7:0] received_data //接收到的数据给到led灯
);

reg [7:0] data; //接收到的数据先存储在寄存器中
reg [3:0] expected_addr = 4'h4; // 期望的地址值

reg [2:0] state;

always @(posedge clk or negedge reset_n) begin
if (~reset_n) begin
state <= 3'b000; // 初始化状态

end else begin
case (state)
3'b000: begin // 等待主板发送数据
state <= 3'b001; // 进入接收状态

end
    3'b001: begin   // 接收数据
            data <= plx_data_in;// 存储接收到的数据
        if (plx_addr_in == expected_addr) begin   // 判断地址是否一致
            received_data <= data; // 执行相关操作,例如处理接收到的数据
        end
        state <= 3'b000;    // 返回等待状态
     
    end
endcase

end

end

endmodule

我写了一个关于CPLD并口通信的程序,接收来自上位机1字节的数据,上位机使用PLxBusIopWrite函数发送函数,一直通信不了,大家可以帮我看一下吗

回帖(1)

王霞

2023-9-26 10:26:59
// 端口置为输出状态
    plx_addr_in <= 4'hF;
    state <= 3'b001;
end
3'b001: begin
    // 请求读数据,设置目标地址
    plx_addr_in <= expected_addr;
    state <= 3'b010;
end
3'b010: begin
    // 等待读取到数据
    data <= plx_data_in;
    state <= 3'b011;
end
3'b011: begin
    // 比较读取到的数据是否符合期望值
    if (data == 8'h00) begin
        // 读取数据成功,将结果输出到led
        received_data <= data;
        expected_addr <= expected_addr + 1;
        state <= 3'b001;    // 继续请求下一个地址的数据
    end else begin
        // 读取数据失败,重新请求同一个地址的数据
        plx_addr_in <= expected_addr;
        state <= 3'b010;
    end
end
endcase
endend
endmodule
举报

更多回帖

发帖
×
20
完善资料,
赚取积分