object “y“ on left-hand side of assignment must have a variable data type

在学习过程中写了一个简单83编码器,代码如下

module code8_3(i,y);
input[7:0] i;
output[2:0] y;
	always@(i)
	begin
		case(i[7:0])
		8'b00000001:y[2:0]=3'b000;
		8'b00000010:y[2:0]=3'b001;
		8'b00000100:y[2:0]=3'b010;
		8'b00001000:y[2:0]=3'b100;
		8'b00010000:y[2:0]=3'b011;
		8'b00100000:y[2:0]=3'b101;
		8'b01000000:y[2:0]=3'b110;
		8'b10000000:y[2:0]=3'b111;
		default: y[2:0]=3'b000;
		endcase
	end
endmodule

报了九个错:Error (10137): Verilog HDL Procedural Assignment error at code8_3.v(8): object "y" on left-hand side of assignment must have a variable data type

可见这里y的格式可能有问题

经debug,发现always语句中的被赋值变量必须为reg型,所以在声明中声明为reg型即可 ,相对的用 assign 连续赋值的对象 必须定义成 wire(线型)

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个Verilog代码示例,用于实现I2C通信的slave模块: ```verilog module I2C_slave ( input [6:0 slv_id, input RESET, input scl_i, // I2C时钟 input sda_i, // I2C数据输入 input [7:0 I2C_RDDATA, // I2C读取数据 // 其他输入和输出端口 ); // 定义状态机的状态 typedef enum logic [2:0 { IDLE, ADDRESS, DATA, ACK, ACK_WAIT, STOP } state_type; reg state_type state; // 当前状态寄存器 reg [6:0 slave_address; // 从机地址寄存器 // 状态机 always @ (posedge scl_i) begin if (RESET) begin state <= IDLE; slave_address <= 7'b0000000; end else begin case (state) IDLE: if (sda_i == 1'b0) begin state <= ADDRESS; end ADDRESS: if (sda_i == 1'b1) begin // TODO: 检查地址匹配 state <= DATA; end DATA: // TODO: 处理数据 state <= ACK; ACK: // TODO: 发送ACK state <= ACK_WAIT; ACK_WAIT: if (sda_i == 1'b0) begin state <= DATA; end else begin state <= STOP; end STOP: // TODO: 处理停止条件 state <= IDLE; endcase end end // 其他逻辑和功能实现 // ... endmodule ``` 这是一个简单的I2C从机模块的Verilog代码示例。它使用状态机来处理I2C通信过程中的不同阶段,并根据输入信号scl_i和sda_i的状态来切换状态。 请注意,这只是一个示例代码,需要根据具体应用和硬件平台进行适当的修改和调整。具体的地址匹配、数据处理、ACK发送、停止条件处理等逻辑需要根据实际需求进行实现。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [i2c.zip_I2C slave verilog_Work It_i2c master verilog_i2c slave](https://download.csdn.net/download/weixin_42664597/86663220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [verilog实现I2C通信的slave模块源码状态机设计可做I2C接口的仿真模型.rar](https://download.csdn.net/download/GJZGRB/15079674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值