Tillsättning av ett undertecknat och en osignerad nummer

P

particleynamics

Guest
Jag försöker lägga till en undertecknad och en osignerad nummer i Verilog. Kan någon berätta för mig hur? Är inte göra .. : (
 
Använd "undertecknad" / "osignerade" sökord. ex:. tråd undertecknat [07:00] a;
 
Jag menade jag HV lägga till ett Signe tal med en osignerad .. till exempel 20 + 10, 20 + (-10), 20 + (-30) I grund och botten en adderare subtraherare block där 1 ingång undertecknas och othe osignerade. Hur ska jag göra det?
 
20 +10, 20 + (-10), 20 + (-30) Allt detta nummer är osignerade. Ange dem som undertecknades användning 6'sd20 +6' SD10 6'sd20 + (-6'sd10) 6'sd20 + (-6'sd30) I detta fall resultatet av verksamheten kommer att undertecknas.
 
I Verilog, måste alla operander vara undertecknad för att resultatet skall undertecknas, annars blir resultatet osignerad. Alla aritmetiska är 2-komplement. Den enda skillnaden mellan signerade och osignerade är hur relationsoperatorer fungerar och hur mindre bredd signerade värden tecken förlängs till större undertecknat bredd värden. Om bredden på en undertecknad operand är mindre än den osignerade operanden i samma uttryck, är det upp till dig att registrera utöka den mindre operanden.
 
faktiskt jag on't vill att utskriften i form av 32.758 för -10 som produktion, jag vill ha det som -10 om jag har gjort 20-30. Hur genomföra denna? Thanx fr åra responser .. plz hlp mig att lösa detta problms. Jag kommer att lägga testbänk om u vill.
 
Detta är den bild jag får .. Jag vill att resultaten som -10, 0 etc etc..
 
Du måste förstå bredden av undertecknade siffror kontra osignerad. Du verkar få arbeta med alla 16-bitars nummer. Om den första operanden är 16-bitars osignerad och den andra är 16-bitars, vill hur resultatet av 16'hFFFF + 0 att vara representerade? Du måste antingen minska den första operanden till 15 bitar, eller Maker resultatet 17-bitars.
 
vår unsigned antalet är 16 bitar i rad (det är NVR aldrig kommer att ha ett negativt värde) medan den andra numret undertecknas n 30 bitar långa .. Vi vill lägga till eller dra ifrån beroende på tecknet på det signerade numret .. Kan u skriv en kod på hur man gör? thanx fr d hjälp :)
 
Code:
 Reg undertecknat [31:0] resultat, reg undertecknat [31:0] operand1, reg [15:00] operand2, alltid [...] börja ... result = operand1 + operand2; ... slutet
 
Jag försökte koden ges .. Det är bara lägga till de två som ger ett minustecken .. Kan u pls lösa det här? Det har varit så många dagar och u folk kunde inte lösa 1 problem! [Color = "Silver"] [SIZE = 1] ---------- Post läggas till 17:21 ----- ----- Tidigare inlägg var 17:20 ---------- [/SIZE] [/COLOR] Det bör lägga till eller dra ifrån beroende på tecknet på det signerade numret .. det är vad jag har frågat efter .. kan inte u människor ger lösning för detta??
 
Jag tror att du behöver konvertera den osignerade numret till en signerad nummer först och sedan lägga till det i andra (undertecknat) nummer.
 
Jösses, du är frågar mig? Jag har aldrig ens hört talas om Verilog innan jag tittade i denna tråd! Låt oss ge det ett bash ändå. PDF kopplade till i post 7 förklarar hur man gör typ gjutning. Tydligen måste du använda $ undertecknat operatören, så: Låt oss säga att du har en osignerad nummer A och ett signerat nummer B. Först deklarera annat tecknat flera C. Använd sedan denna kod:
Code:
 C = $ signerad (A)
Tillsätt sedan B och C.
 
particleynamics, måste du visa koden du kör. Den har antingen en bugg, eller simulatorn du använder har en bugg. Jag försökte bara detta med Modelsim
Code:
 modul toppen, reg undertecknat [31:0] operand1, reg [15:00] operand2, reg undertecknat [31:0] resultat, första börjar operand1 = -1; operand2 = 10; resultat = operand1 + operand2, $ display (resultat, operand1, operand2), slutet endmodule
och resultatet jag får är
Code:
 # 9 -1 10
 
Dave_59 har använt XILINX ... n koden är som följer .. PLS helpme .. Modulen adderare (resultat, operand1, operand2); ingång undertecknat [31:0] operand1, ingång [15:00] operand2, utgång undertecknat [31:0] resultat, reg undertecknat [31:0] resultat, alltid @ (operand1, operand2) börjar resultat = + operand2 operand1; änden endmodule
 
Jag manuellt tilldela slumpmässiga värden i testbänken .. inte HV ett program för det ...
 
Det finns inga problem med din kod. det sätt din simulatorn visar värden på den övre nivån. Detta fungerar för mig.
Code:
-modul adderare (input kabel undertecknat [31:0] operand1, ingång tråden [15:0] operand2, utgång reg undertecknat [31:0] resultat), alltid @ (operand1 eller operand2) result = operand1 + operand2; endmodule Modulen toppen, reg undertecknat [31:0] OP1, reg [15:00] OP2, wire undertecknat [31:0] resultat, huggorm A1 (OP1, OP2, resultat); första börjar OP1 = -1; OP2 = 10; # 10 $ display (resultat, OP1, OP2), slutet endmodule
 

Welcome to EDABoard.com

Sponsor

Back
Top