从多路器代码中的小感触
时间:07-18 14:14 阅读:731次
*温馨提示:点击图片可以放大观看高清大图
简介:形式可以不同,其实实现逻辑是相同的,这也能看出了开发工具的强大的地方!
多路选择器的不同语句的实现
module mux1(
input a,
input b,
input sel,
output out
);
assign out=sel?a:b;
endmodule
module mux2(
input a,
input b,
input sel,
output reg out
);
always@(a or b or sel )
begin
case(sel)
1'b1: out=a;
1'b0: out=b;
default: out='bx;
endcase
end
endmodule
module mux3(
input a,
input b,
input sel,
output reg out
);
always@(a or b or sel )
begin
if(sel)
out=a;
else
out=b;
end
endmodule
![1.jpg](/Public/lazyload/gray.png)
图1-1 assign语句的RTL
![2.jpg](/Public/lazyload/gray.png)
图1-2 assign语句的Technology Map Viewer
![3.jpg](/Public/lazyload/gray.png)
图2-1 CASE语句的RTL
![4.jpg](/Public/lazyload/gray.png)
图2-2CASE语句的Technology Map Viewer
![5.jpg](/Public/lazyload/gray.png)
图3-1 if-else语句的RTL
![6.jpg](/Public/lazyload/gray.png)
图3-2 if-else语句的Technology Map Viewer
从各自实现情况看,它们所占有的资源基本是一样的。但从RTL中CASE语句还是与 if-else语句有所区别。CASE语句倾向于并行结构,后者倾向于优先级
不管采用何种方式进行设计,最近的优化和布局布线其实是交给了开发工具去干,所以我以为在硬件描述语句中,可以用一句话:条条路径通罗马,大路可能宽阔,小路可能便捷,但是最终都是到达同一个目的地。从上面的分析,形式可以不同,其实实现逻辑是相同的,这也能看出了开发工具的强大的地方!