控制最好用状态机来做。
除了触发器,就会出现latch
coding style 避免出现latch
code switch 需要就认为生成一些latch
module 同步复位
输入
输出
if、else成对出现
而这边少一个else
说明:
reset为0——清零
g——1——通过
变量为高电平时
任何信号都可以传过去
低电平就锁定了——latch(电路功能)
与触发器建模的不同:生成latch——
生成flip-flop
module
endmodule就是一个建模的一个格式
D,时钟,复位,Q
输入
输出说明
对flip-flop建模的话就用
如果异步复位信号取反
则清零
否则
Q取反
逻辑代码生成的就是
低电平有效的触发器
在verilog中写了不正确的flip-flop
生成电频 ——level敏感的
一般要写成always@(posedge clk)
这样生成一个flip-flop
这是edge边沿敏感的才能形成真正的flip-flop
要写成q<=d
才正确
这是正确的同步复位信号
同步写法——同步在clk上升沿上
异步:
always@(posedge clk or negedge resetn)
写法错误——要写成<=非阻塞赋值
另一种flip-flop既有异步也有同步复位
异步就同步到negedge Reset
而同步复位呢就同步到
posedge clk
上
触发器最容易形成移位寄存器
如果复位清零的话就是0
否则L=1
R=Q
f否则
for循环
Q=Q+1
16个flip-flop串起来
这就是用for循环对移位寄存器建模
可进行设置数值的建模
计数器建模:
如果清零就0
否则L=1
R=Q
否则就可以作为counter
RTL code 写法
加号可以综合
有限状态机
数字电路,包含预定义转态,在不同输入控制条件下,状态就变化。
米勒的状态机器
和当前状态,输入有关
数字电路上常见
一般,下一状态和当前状态输入若影响输出——mealy型
否则moore 型
三段式:状态跳转
状态跳转的条件
状态输出情况
一定要用非阻塞赋值,这个也没有用
循环减一的结构
1下0上
基本写法
为1往下跳
为0不动
首先根据功能要求画状态图
阻塞赋值和非阻塞赋值
time
region有block 区和非block区
RTL——register-transfer-level
怎么构建和测试一个module
下节课就把berilog过了一遍
接下来就将RTL code
Q:make file 里边include文件 一般来讲在c或者c++里边用单反引号‘
compile complex 里的
预告: