多重Switchを使いif文の実装
2 views (last 30 days)
Show older comments
Switchブロックを使いif文を実装していますが、
条件が同じ幅で増加する条件でSwitchブロックを何個も並列で繋げるのはさすがにきれいには見えない、
読みにくくなるため質問します。
下記のif文を例としたら簡単に実装する方法は何がありますか?
always@(posedge clk or negedge resetn)begin
if(~resetn)begin
x<=4'b0000;
end
if(a==1)
x<=4'b0001;
else if(a==2)
x<=4'b0001;
else if(a==3)
x<=4'b0010;
else if(a==4)
x<=4'b0100;
else if(a==5)
x<=4'b1000;
else if(a==6)
x<=4'b1001;
.....
end
このように同じ幅を持つ条件がある場合ただ単にSwitchブロックを並ばせるしかないのでしょうか?
0 Comments
Accepted Answer
Shoumei
on 3 Dec 2019
HDL Coderのご質問でしょうか?ご質問または製品欄に何の製品の質問か書いておいたほうが良いですよ。
MATLAB Functionブロックを使うと良いです。
こんなMATLABコードから
function x = fcn(a)
if a ==1
x = fi(1, 0, 4, 0);
elseif a==2
x = fi(1, 0, 4, 0);
elseif a==3
x = fi(2, 0, 4, 0);
elseif a==4
x = fi(4, 0, 4, 0);
elseif a==5
x = fi(8, 0, 4, 0);
else
x = fi(9, 0, 4, 0);
end
こんなVerilogが生成できます。
always @(a) begin
if (a == 8'd1) begin
x_1 = 4'b0001;
end
else if (a == 8'd2) begin
x_1 = 4'b0001;
end
else if (a == 8'd3) begin
x_1 = 4'b0010;
end
else if (a == 8'd4) begin
x_1 = 4'b0100;
end
else if (a == 8'd5) begin
x_1 = 4'b1000;
end
else begin
x_1 = 4'b1001;
end
end
リセットが必要であれば、FFの記述をpersistentを使って追加しましょう。
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!