用Verilog写一个以0xFF为头包,接收4个字节,然后再以相同的顺序发送,先发0x55,数据放在IO口上的仿真代码
时间: 2023-05-23 12:07:32 浏览: 108
串口接收多字节 Verilog程序
3星 · 编辑精心推荐
module header_4byte;
reg [7:0] header = 8'hFF;
reg [31:0] data_in;
reg [7:0] data_out_3, data_out_2, data_out_1, data_out_0;
wire [7:0] io_port;
assign io_port = {data_out_3, data_out_2, data_out_1, data_out_0};
integer i;
initial begin
data_in = 32'h12345678;
// Send Header
#10 $display("Sending Header: 0x%x", header);
for (i = 0; i < 8; i = i + 2) begin
#1 data_out_3 = header[i + 7];
data_out_2 = header[i + 6];
data_out_1 = header[i + 5];
data_out_0 = header[i + 4];
#1 data_out_3 = header[i + 3];
data_out_2 = header[i + 2];
data_out_1 = header[i + 1];
data_out_0 = header[i];
end
// Send Data
#10 $display("Sending Data: 0x%x", data_in);
for (i = 0; i < 32; i = i + 8) begin
#1 data_out_3 = data_in[i + 7];
data_out_2 = data_in[i + 6];
data_out_1 = data_in[i + 5];
data_out_0 = data_in[i + 4];
#1 data_out_3 = data_in[i + 3];
data_out_2 = data_in[i + 2];
data_out_1 = data_in[i + 1];
data_out_0 = data_in[i];
end
// Send Footer
#10 $display("Sending Footer: 0x%x", header);
for (i = 0; i < 8; i = i + 2) begin
#1 data_out_3 = header[i + 7];
data_out_2 = header[i + 6];
data_out_1 = header[i + 5];
data_out_0 = header[i + 4];
#1 data_out_3 = header[i + 3];
data_out_2 = header[i + 2];
data_out_1 = header[i + 1];
data_out_0 = header[i];
end
// Send 0x55
#10 $display("Sending 0x55");
for (i = 0; i < 8; i = i + 2) begin
#1 data_out_3 = 1'b0;
data_out_2 = 1'b0;
data_out_1 = 1'b1;
data_out_0 = 1'b0;
#1 data_out_3 = 1'b0;
data_out_2 = 1'b1;
data_out_1 = 1'b0;
data_out_0 = 1'b1;
end
// Send Data in Reverse Order
#10 $display("Sending Data in Reverse Order: 0x%x", data_in);
for (i = 24; i >= 0; i = i - 8) begin
#1 data_out_3 = data_in[i + 7];
data_out_2 = data_in[i + 6];
data_out_1 = data_in[i + 5];
data_out_0 = data_in[i + 4];
#1 data_out_3 = data_in[i + 3];
data_out_2 = data_in[i + 2];
data_out_1 = data_in[i + 1];
data_out_0 = data_in[i];
end
end
endmodule
阅读全文