Was bedeutet nicht kombinatorischer Bereich im Synopsys-Design-Compiler?

Ich habe einen Ripple-Addierer mit Volladdierern entworfen. Um Verzögerungen zu finden, die bei der Durchführung dieser Addition entstehen, habe ich in jedem Volladdierermodul eine Uhr eingebaut. In meinem Hauptcode habe ich diese Module instanziiert, um den Ripple-Addierer zu konstruieren. Als ich den Ripple-Adder-Code synthetisierte und den Bereich fand, war das Ergebnis ungefähr so:

combinational area=54
non-combinational area=204;

Ich möchte wissen, ob dieser nicht kombinatorische Bereich auf den Overhead zurückzuführen ist, der durch die Einbeziehung der Uhr in jedes Modul entsteht. Gibt es eine Möglichkeit, diesen nicht kombinierbaren Bereich zu reduzieren?

Posten Sie bitte Verilog - ist es nicht auch normalerweise PrimeTime, die Sie verwenden sollten, um Verzögerungen zu finden?
Ich habe den Befehl timing_report im Design-Compiler verwendet. Ich habe den Befehl create_clock verwendet, um die Periode der Uhr anzugeben.

Antworten (1)

Der nicht kombinierbare Bereich ist im Allgemeinen nur die Größe der sequentiellen Elemente in Ihrem Design (Flip-Flops, Riegel, Stößel usw.). Haben Sie diese bei der Erstellung der Uhren berücksichtigt?

Überprüfen Sie Ihre Netzliste. Während Sie vielleicht nicht beabsichtigt haben, sequenzielle Elemente zu haben, hat der Design-Compiler vielleicht gedacht, dass Sie dies getan haben.
@ tim Ich habe eine 'and'-Operation und eine xor-Operation innerhalb des Blocks immer gegeben, um einen Halbaddierer zu entwerfen. Fällt das unter den nicht kombinatorischen Bereich?
Modul haa59(a,b,s,c,clk); Eingang a,b; Eingabe clk; Ausgang s,c; reg c1,s1; always@(posedge clk) begin s1<=a^b; c1<=a&&b; Ende zuweisen s=s1; c=c1 zuweisen; Endmodul
Das Obige ist Halbaddierer-Verilog-Code, den ich zum Entwerfen von Volladdierern verwendet habe.
Dieses Modul enthält zwei Flip-Flops (s1 und c1). Diese zählen beide für Nicht-Kamm. Bereich. Die andund xorsind kombinatorischer Bereich. @funkeln
Da ich s1 und c1 im Always-Block angegeben habe, werden sie als Register betrachtet?
@twinkle - Nicht unbedingt, Sie könnten auch einen kombinatorischen Always-Block haben. Sie werden als Register synthetisiert, weil sie ihre Werte auf Posedge der Uhr aktualisieren (das ist es, was Register tun, Aktualisierung auf Taktflanke).
@tim Gibt es eine andere Möglichkeit, das Modul zu takten, als den Always-Block zu verwenden?
Ich weiß nicht, was Ihrer Meinung nach "das Modul takten" wirklich bedeutet. Uhren existieren, damit sie sequentielle Elemente ansteuern können. Ein reines Schaltnetz sollte keinen Takt haben. @funkeln
@tim Wenn ich einen großen kombinatorischen Block habe und die Verzögerung des kritischen Pfads finden möchte, wie gehe ich vor?
@twinkle - Tut mir leid, ich weiß die Antwort nicht. Vielleicht wäre das ein gutes Thema für eine Frage.