我习惯于在emacs中使用VHDL编写代码,它具有很好的美化功能,可以对齐信号赋值。Verilog模式有类似的东西吗?
转换:
r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;
if (r_Done == 1'b1)
begin
r_SM_Main <= s_CLEANUP;
o_Tx_Active <= 1'b0;
end
:
r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;
if (r_Done == 1'b1)
begin
r_SM_Main <= s_CLEANUP;
o_Tx_Active <= 1'b0;
end
Verilog模式可以很好地保持if
else
begin
end
对齐,但它不像我想要的那样对齐分配。请注意,if语句内部不与if语句外部的<=
对齐。我想要每个开始/结束块分开处理
我使用verilog模式,我发现这是默认的工作
- 输入
C-x h
以突出显示整个缓冲区。 - 然后
TAB
让它美化一切。简单多了,也不那么乏味了!
根据这个答案,你可以尝试自定义align-rules-list
。
像这样的东西应该有帮助:
(eval-after-load "align"
'(add-to-list 'align-rules-list
'(verilog-assignment
(regexp . "\(\s-*\)<=")
(mode . '(verilog-mode))
(repeat . nil))))
现在M-x align
应该应用新的对齐规则
在GNU Emacs 24.3.1的Verilog模式下,您可以在任何赋值操作中将光标放置在非阻塞赋值操作符"<="上。例如,在代码的顶部:
r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;
将游标放在任意一个赋值操作符上,并键入C-c =
。代码现在变成
r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;
该操作将只在该代码段中执行。该操作不会跳转到任何其他语句:if-else、case、always等。为了在另一条语句中执行相同的操作,您必须进入该语句,单击赋值操作符并再次键入C-c =
。