Guest User

Untitled

a guest
Jan 16th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. //除算器
  2. /* Portlist
  3. Divider #(.bw_Dsor(),.bw_Dend(),.bw_i()) _
  4. (.Clock(), .Reset(), .Start(), .Dsor(), .Dend(), .Quo(), .End() ,.Busy());
  5. */
  6.  
  7. module Divider
  8. ////////////////////////////////////////////////////
  9. // Parameters
  10. #(
  11. parameter bw_Dsor = 4,
  12. parameter bw_Dend = 7,
  13. parameter bw_i = 3 //bw_Dendが収まるビット幅
  14. )
  15. ////////////////////////////////////////////////////
  16. // Ports
  17. (
  18. input Clock,Reset,Start,
  19. input [bw_Dsor-1:0] Dsor, //除数
  20. input [bw_Dend-1:0] Dend, //被除数
  21.  
  22. output reg [bw_Dend-1:0] Quo, //商
  23. output reg Busy,
  24. output reg End //End Pulse
  25. );
  26.  
  27. localparam bw_SReg = bw_Dsor + bw_Dend;
  28. ////////////////////////////////////////////////////
  29. // Registers
  30. reg [bw_SReg-1:0] SReg; //シフトレジスタ
  31. reg [bw_Dsor-1:0] rDsor;
  32. reg [bw_i-1:0] i; //シーケンス制御
  33. reg rSeqEn;
  34.  
  35. ////////////////////////////////////////////////////
  36. // Net
  37. wire [bw_Dsor:0] wPrem = SReg[bw_SReg-1:bw_Dend-1]; //部分余
  38.  
  39. wire [bw_Dsor:0] SubRem = wPrem - {1'b0,rDsor}; //部分商を計算
  40. wire [bw_Dsor-1:0] MuxOut = (SubRem[bw_Dsor]) ? SReg[bw_SReg-2:bw_Dend-1] : SubRem [bw_Dsor-1:0];
  41. wire PQuo = ~SubRem[bw_Dsor]; //部分商 Part of Quo
  42. wire wSeqEn = (i>0);
  43.  
  44. always@(posedge Clock or posedge Reset) begin
  45. if(Reset)begin
  46. SReg <= 0 << (bw_SReg-1);
  47. rDsor <= 0 << (bw_Dsor-1);
  48. i <= 0 << (bw_i-1);
  49. Quo <= 0;
  50. End <= 1'b0;
  51. Busy <= 1'b0;
  52. end
  53. if(Clock)begin
  54.  
  55. if(Start)begin
  56. rDsor <= Dsor;
  57. SReg[bw_Dend-1:0] <= Dend;
  58. i <= bw_Dend;
  59. Busy <= 1'b1;
  60. end else if(wSeqEn) begin
  61. SReg <= {MuxOut,SReg[bw_Dend-2:0],PQuo};
  62. i <= i - 1;
  63. end else begin
  64. Quo <= SReg[bw_Dend-1:0];
  65. end
  66.  
  67. rSeqEn <= wSeqEn;
  68. if( {rSeqEn,wSeqEn} == 2'b10) begin
  69. End <= 1'b1;
  70. Busy <= 1'b0;
  71. end else
  72. End <= 1'b0;
  73. end
  74. end
  75.  
  76. endmodule
Add Comment
Please, Sign In to add comment