SpinalHDL之结构(二)

本文作为SpinalHDL学习笔记第六十二篇,介绍SpinalHDL的区域(Area)

有时, ⽤Component定义逻辑可能是致命的, 因为:
需要定义所有的⽣成器参数和IO(冗⻓的, 重复的)
分隔你的代码

在这种时候你可以⽤Area来定义⼀组信号/逻辑:

Scala 复制代码
class UartCtrl extends Component {
...
val timer = new Area {
val counter = Reg(UInt(8 bits))
val tick = counter === 0
counter := counter - 1
when(tick) {
counter := 100
}
}
val tickCounter = new Area {
val value = Reg(UInt(3 bits))
val reset = False
when(time.tick) { //参考timer区域的tick
value := value + 1
}
when(reset) {
value := 0
}
}
val stateMachine = new Area {
...
}
}

Verilog:

Scala 复制代码
UartCtrl myUart (
.clk (clk ), //i
.reset (reset) //i
);
module UartCtrl (
input clk,
input reset
);
reg [7:0] timer_counter;
wire timer_tick;
reg [2:0] tickCounter_value;
wire tickCounter_reset;
assign timer_tick = (timer_counter == 8'h0);
assign tickCounter_reset = 1'b0;
always @(posedge clk) begin
timer_counter <= (timer_counter - 8'h01);
if(timer_tick) begin
timer_counter <= 8'h64;
end
if(timer_tick) begin
tickCounter_value <= (tickCounter_value + 3'b001);
end
if(tickCounter_reset) begin
tickCounter_value <= 3'b000;
end
end
endmodule

**Note:**在VHDL和Verilog中, 有时候前缀可以⽤来把变量拆分成逻辑块, 在SpinalHDL中可以⽤Area实现。
**Note:**ClockingArea是⼀种特殊的Area允许你⽤给定的ClockDomain定义⼀块硬件电路。

相关推荐
数据小爬虫@6 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.8 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
GIS开发特训营13 分钟前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Narutolxy14 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader21 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默32 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Cachel wood38 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端40 分钟前
0基础学前端-----CSS DAY9
前端·css
Code哈哈笑41 分钟前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
joan_8544 分钟前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui