我想用Verilog代码合成一个时钟门控单元,如下所示:
reg clk_en_i;
always @(clk_in or clk_en)begin
if(!clk_in)
clk_en_i <= clk_en;
end
assign clk_out= clk_in&clk_en_i;
但在FPGA合成之后,门控功能失败。我观看了Vivado的网表原理图,发现synplify将时钟门控单元合成到LUT6单元:LUT6
这不是一个无故障的门控电池!这就是函数失败的原因!
我试图通过Identify探测内部信号,但在FPGA合成之后,功能是正确的!我再次看了网表示意图:LDCE+AND
相同的Verilog代码产生不同的合成结果。为什么?我确定LUT6是错误的逻辑结果。有人可以解释这种奇怪的情况吗?
答案 0 :(得分:0)
re_package = re.compile(r'^package +(.+);')
这看起来很可疑。无论// This is for completion of context variables and shortcuts
public variableCompletionProvider = <monaco.languages.CompletionItemProvider>{
triggerCharacters: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''),
provideCompletionItems: (model, position, token) => {
// Check if inside string quotes, then don't offer variable completion as inside quotes only area completion should be available
var quotes = model.findMatches(`'([^'])*'`, true, true, true, null, true);
if (quotes.length > 0) {
for (let quote of quotes) {
if (quote && (position.column >= quote.range.startColumn && position.column <= quote.range.endColumn)) {
return;
}
}
}
// If I am not inside a string (quotes) then proceed with providing Completion
// Some more Code Here ...
}
};
状态如何,只要if(!clk_en)
clk_en_i <= clk_en;
丢弃,您就会立即更新clk_en_i
。
也许,当clk_en
为低时,您应该更改clk_in
。像:
clk_en_i