我习惯用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
To This:
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语句之外的<=
对齐。基本上我希望每个开始/结束块单独处理。
答案 0 :(得分:4)
我使用verilog模式,我发现默认情况下这是有效的。
C-x h
以突出显示整个缓冲区。TAB
让它美化一切。更简单,更乏味!答案 1 :(得分:2)
根据this answer,您可以尝试自定义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
应该应用新的对齐规则。
答案 2 :(得分:1)
在GNU Emacs 24.3.1的Verilog模式下,您可以将光标放在任何赋值操作中的非阻塞赋值运算符“&lt; =”上。例如,在代码的顶部:
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 =
再次。