1.UART原理部分可以参考其他博主。
UART.h头函数
#include <iostream>
#include "systemc.h"
#define BPS_CNT (50000000/9600) // 波特率9600
/*
*端口声明
*进行声明
*/
SC_MODULE(UART0) {
sc_in < bool > clk, start_flag , sys_rst_n; // 时钟、起始标识、复位信号
sc_in < sc_bv<8> > q ; // 8位数据的输入
sc_out < bool > tx_flag; // 发送过程标志,高电平则是发送数据的状态
sc_out < sc_bv<8> > q_output; // 右移一位后的结果
sc_out < sc_bv<1> > uart_txd; // 发送的1位数据,起始位、第0位,...,第8位,终止位
sc_signal < sc_bv<8> > tx_data;
sc_signal < sc_uint<4> > tx_cnt;
sc_signal < sc_uint<15> > bps_cnt;
void prc_outputs(); // 组合逻辑
void BPS_TIMER(); // 计数,即clock与波特率的转换
void load_data(); // 加载输入数据(时序逻辑)
SC_CTOR(UART0) {
SC_METHOD(prc_outputs); // 组合逻辑,把各个敏感信号都列出来哦
sensitive << tx_cnt << start_flag <<

博客介绍了UART开发相关内容,可参考其他博主了解UART原理。涉及UART.h头函数,计数线程计数满会使UART0::prc_outputs()中case跳转,start_flag为1时并行加载输入数据等。还提到monitor模块打印信息,main.cpp完成端口绑定,展示了结果和波形文件。
最低0.47元/天 解锁文章
1634





