I/O | enum

I/O 输入/输出 库

流:字符序列

输入流:将数据输入到输入流中

输出流:将输出流的缓冲输出

IO运算符

  1. >>从左侧输入流对象读取到右侧数据
  2. <<从右侧数据写入到左侧输出流对象

头文件

#include <io.h>

#include <iostream>

#include <windows.h>

#include <fstream>

#include <filesystem>

#include <sstream>

#include <string>

输入输出流类型对象

注意:IO对象不可以拷贝和赋值

IO流可能发生错误,一旦错误状态,后续的IO操作都会失败,因此一般将它当作条件语句使用,保证有效状态

  1. iostream标准流
    1. cin标准输入:读取控制台数据到istream中
    2. cout标准输出:将ostream的缓冲区数据,输出到控制台
  2. fstream文件流
    1. ifstream:读取文件到istream中
    2. ofstream:将ostream的缓冲区数据,输出到文件
    3. 操作:
      1. 初始化:fstream f; || fstream f(s) ||  fstream f(s,mode) :
      2. s为文件名,默认调用open(),s可以为string或指向c风格字符串的指针
      3. mode:文件模式:std::ios::
        1. in:只读,仅对输入流
        2. out:只写,仅对输出流,默认截断,需要同时指定app模式
        3. app:写操作前,定位到文件末尾,当out被设定
        4. ate:打开文件后,定位到文件末尾
        5. trunc:截断(之前的清空)文件,当app被设定
        6. binary二进制方式
      4. open(s)打开名为s的文件,与文件流绑定,注意,如果要绑定另一个文件,首先要关闭
      5. close()关闭文件,与文件流解绑
      6. is_open()如果成功打开与流关联的文件,返回true
      7. 可以用getline(if,str)从if文件流读取数据,保存到string中
  3. sstream字符串流
    1. istringstream:读取string到istream中
    2. ostringstream:将ostream的缓冲区数据,输出到string
    3. 操作:
    4. sstream s || sstream s(str) 将拷贝的str与字符流绑定
    5. s . str() 返回绑定的拷贝
    6. s. str(str) 拷贝str,赋值操作

绑定输入输出流

输出流缓冲区

  1. 每个输出流都管理一个缓冲区,目的将多个多个输出操作组合为一个,提高效率
  2. 显示刷新缓冲区:
    1. endl:添加/n,再刷新
    2. flush:直接刷新
    3. ends:添加空格,再刷新
    4. unitbuf:之后每次写操作都会刷新缓冲区

enum:

将整形常量const组织在一起,为字面值常量类型

enum不限定作用域,枚举成员作用域与枚举本身作用域相同,可以通过::访问成员,当在同一个作用域内,可以直接访问

enum class | enum struct 限定作用域,枚举成员在枚举的作用域外不可访问,因此只能通过::访问成员,

初始化 | 赋值 枚举对象:枚举类型对象 = 枚举名::成员名(必须用枚举成员初始化枚举对象)

可以通过枚举名 : type 指明枚举类型,对于enum存在足够大的内存存储,对于enum class默认为int

我们可以仅声明不定义(前置声明)枚举:对于enum必须指定类型,对于enum class默认为int

注意:枚举声明和的定义的类型必须匹配,并且在同一作用域不能声明同名的enum和enum class

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Verilog是一种用于数字电路设计的语言,支持并行和时序逻辑编程。要使用Verilog编写I2C模块,你需要了解I2C协议的工作原理和Verilog语言的基本语法。 首先,需要了解I2C协议的基本信号和功能,包括SCL(时钟信号)和SDA(数据信号)。然后,你可以使用Verilog的模块定义语句定义I2C模块的输入输出端口。 接下来,你需要编写I2C协议的时序逻辑,这可以通过编写一系列对SCL和SDA信号的控制语句来实现。例如,在I2C协议的开头,你需要生成一个START信号,并在结束时生成一个STOP信号。在过程中,你需要处理从I2C从机的读写请求,并确保从机能够向主机发送和接收数据。 最后,你需要对I2C模块进行仿真和验证,以确保它正确地实现了I2C协议的标准。如果在仿真过程中发现错误,你需要进一步修改代码,直到达到预期的性能。 总的来说,编写I2C模块需要深入了解I2C协议和Verilog语言, ### 回答2: I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接电路板上的集成电路(IC)芯片。要使用Verilog完成I2C模块的编写,我们需要以下几个步骤: 1. 首先,需要定义I2C模块的输入和输出接口。输入接口包括时钟信号(CLK)、复位信号(RST)、数据线(SDA)和时钟线(SCL)。输出接口包括写入标志位(WR)、读取标志位(RD)、数据输出线(SDA_OUT)和时钟输出线(SCL_OUT)。 2. 接下来,我们需要定义I2C的状态机。状态机用于控制I2C的工作模式,包括起始位、地址传输、数据传输等。可以使用case语句或if语句实现状态机逻辑。 3. 在状态机中,我们需要实现I2C的起始位、停止位、地址传输、数据传输等功能。起始位和停止位是I2C通信的起始和终止信号。地址传输包括从主设备发出地址以选择从设备,以及从设备响应地址验证的过程。数据传输包括从主设备写入数据到从设备,以及从设备返回数据给主设备的过程。 4. 必须实现I2C的时钟同步机制,以确保数据的正确传输。通常使用计数器或延时模块来生成适当的时钟信号,以便在时钟边沿进行数据传输。 5. 最后,我们需要测试和验证编写的I2C模块。可以使用外部设备来模拟主设备和从设备,以确保I2C模块的正确运行。可以通过发送和接收数据来测试I2C的读写功能,并使用逻辑分析仪或仿真工具来检查时序和数据的正确性。 通过以上步骤,我们可以使用Verilog完成I2C模块的编写。这个I2C模块可以在FPGA或ASIC等硬件平台上使用,用于控制和通信不同的集成电路芯片。 ### 回答3: 用Verilog编写I2C模块的目标是实现一个能够在Verilog硬件描述语言环境下模拟和控制I2C总线通信的模块。I2C通信是一种串行通信协议,常用于连接外部设备和处理器。以下是一个简单的Verilog代码示例,用于实现基本的I2C通信功能: ```verilog module I2C ( input wire clk, input wire rst, input wire sda_i, output wire sda_o, output wire sda_en, output wire scl ); // I2C状态枚举类型 typedef enum { IDLE, START, ADDR, DATA, STOP } i2c_state_t; // 输出寄存器和状态寄存器 reg [7:0] tx_reg; reg [7:0] rx_reg; reg [2:0] data_cnt; reg sda_reg; reg sda_hold; reg scl_reg; reg sda_en_reg; reg [2:0] state; always @(posedge clk or posedge rst) begin if (rst) begin state <= IDLE; data_cnt <= 0; tx_reg <= 0; sda_reg <= 1; sda_hold <= 1; sda_en_reg <= 1; scl_reg <= 1; end else begin case(state) IDLE: begin sda_reg <= 1; scl_reg <= 1; sda_en_reg <= 1; if (!sda_i) begin state <= START; data_cnt <= 0; end end START: begin state <= ADDR; sda_reg <= 0; end ADDR: begin state <= DATA; sda_reg <= tx_reg[7]; end DATA: begin if (data_cnt < 7) begin sda_reg <= tx_reg[data_cnt]; data_cnt <= data_cnt + 1; end else begin sda_reg <= 1; data_cnt <= 0; state <= STOP; end end STOP: begin state <= IDLE; sda_reg <= 0; sda_en_reg <= 1; end endcase scl_reg <= sda_hold ? 1 : ~scl_reg; end end assign sda_o = sda_reg; assign scl = scl_reg; assign sda_en = sda_en_reg; endmodule ``` 以上是一个简单的Verilog代码示例,用于演示如何实现基本的I2C通信功能。该模块可以通过输入连接的sda_i信号读取外部设备的数据,并通过sda_o信号将数据发送给外部设备。通过控制clk和rst信号,可以控制I2C模块的运行。在实际应用中,还可以根据具体需求扩展和优化该模块的功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值